我不小心在本地主分支上运行了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^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。

其他回答

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

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

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

对于较新的Git版本,如果您尚未提交合并,并且存在合并冲突,您可以简单地执行以下操作:

git merge --abort

来自man git merge:

只有在合并导致冲突后才能运行[This]。gitmerge--abort将中止合并过程并尝试重建合并前的状态。

如果没有冲突和合并完成,则:

  git reset --hard HEAD~1

如果在执行合并时发生冲突,则中止将使您退出最近的合并更改:

git merge --abort

或者如果您想恢复到特定的提交id。

 git reset --hard <commit-id>

如果您的合并和相应的提交尚未被推送,您可以始终切换到另一个分支,删除原始分支并重新创建它。

例如,我意外地将一个开发分支合并到master中,并想撤消它。使用以下步骤:

git checkout develop
git branch -D master
git branch -t master origin/master

瞧!Master与原点处于同一阶段,您的错误合并状态将被清除。