我不小心在本地主分支上运行了gitmergesome_other_branch。我还没有将更改推送给origin master。如何撤消合并?


合并后,git状态显示:

# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.

我如何撤销所有这些提交?


当前回答

作为一个额外的选项,我主要遵循这里描述的分支模型:http://nvie.com/posts/a-successful-git-branching-model/因此,通常都会与--no ff(无快进)合并。

我刚刚阅读了这个页面,因为我无意中将一个测试分支而不是我的发布分支与用于部署的master(网站,master是实时的)合并。测试分支有另外两个分支合并到它,总共有大约六个提交。

所以为了恢复整个提交,我只需要一个git重置--hardHEAD^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。

其他回答

它可以通过多种方式实现。

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

只需创建新的分支,然后cherry pick所需的提交。

它的保护程序和更简单的重置在上面的许多答案中都有描述

如果您想要一个命令行解决方案,我建议您只使用MBO的答案。

如果您是新手,您可能会喜欢图形化方法:

启动gitk(从命令行,或在文件浏览器中单击鼠标右键(如果有))您可以很容易地在那里发现合并提交-从顶部开始的第一个节点有两个父节点按照第一个/左侧父级的链接(合并前当前分支上的父级,通常为红色)在所选提交上,右键单击“将分支重置到此处”,选择此处的硬重置

参见Git书的第4章和Linus Torvalds的原始帖子。

要撤消已推送的合并,请执行以下操作:

git revert -m 1 commit_hash

如果您再次提交分支,请务必还原还原,就像Linus所说的那样。

回答问题“撤销尚未推送的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