我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?
合并后,git状态显示:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我如何撤销所有这些提交?
当前回答
它可以通过多种方式实现。
1) 中止合并
如果您处于错误合并(错误地使用了错误的分支)之间,并且希望避免合并,以便最新返回分支,如下所示:
git merge --abort
2) 将HEAD重置为远程分支
如果您从远程开发分支工作,可以将HEAD重置为远程分支上的最后一次提交,如下所示:
git reset --hard origin/develop
3) 删除当前分支,然后再次从远程存储库签出
考虑到您正在本地repo中开发分支,该分支与远程/开发分支同步,您可以执行以下操作:
git checkout master
##to delete one branch, you need to be on another branch, otherwise you will fall with the branch :)
git branch -D develop
git checkout -b develop origin/develop
其他回答
使用此命令中止合并:
git merge—中止
假设您的本地主机不领先于源/主机,您应该能够
git reset --hard origin/<branch-name>
因此,假设您在master上执行了此操作,那么您的本地master分支看起来应该与origin/master相同。
到了这个问题,我们也希望恢复到与原点匹配(即,在原点之前没有提交)。进一步研究发现,有一个重置命令正是针对这一点:
git重置--硬@{u}
注意:@{u}是origin/master的简写。(当然,您需要远程存储库才能实现这一点。)
回答问题“撤销尚未推送的Git合并”
您可以使用git reset-hard HEAD~1
考虑以下情况,其中有2个分支主功能1:
$ git log --graph --oneline --all
执行Git合并
$ git merge feature-1
$ git log --graph --oneline --all
撤消Git合并
$ git reset --hard HEAD~1
$ git log --graph --oneline --all
作为一个额外的选项,我主要遵循这里描述的分支模型:http://nvie.com/posts/a-successful-git-branching-model/因此,通常都会与--no ff(无快进)合并。
我刚刚阅读了这个页面,因为我无意中将一个测试分支而不是我的发布分支与用于部署的master(网站,master是实时的)合并。测试分支有另外两个分支合并到它,总共有大约六个提交。
所以为了恢复整个提交,我只需要一个git重置--hardHEAD^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。