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


合并后,git状态显示:

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

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


当前回答

使用现代Git,您可以:

git merge --abort

旧语法:

git reset --merge

旧学校:

git reset --hard

但实际上,值得注意的是,如果存在merge_HEAD,gitmerge--abort仅等同于git-reset--merge。这可以在Git帮助的merge命令中阅读。

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

在失败的合并之后,如果没有merge_HEAD,则可以使用git-reset-mmerge来撤销失败的合并,但不一定使用gitmerge-art来撤销,因此它们不仅是同一事物的新旧语法。

我个人认为git reset-merge在日常工作中更加强大和有用,所以这是我一直使用的方法。

其他回答

如果你还没有提交,你只能使用

$ git checkout -f

它将撤消合并(以及您所做的一切)。

回答问题“撤销尚未推送的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^,它就恢复了整个合并。由于合并没有快速进行,所以合并是一个块,后退一步就是“分支未合并”。

奇怪的是,缺少了最简单的命令。大多数答案都是有效的,但撤销你刚才做的合并,这是一种简单而安全的方法:

git reset --merge ORIG_HEAD

引用ORIG_HEAD将指向合并之前的原始提交。

(--merge选项与合并无关。它就像git-reset--hard ORIG_HEAD,但更安全,因为它不会触及未提交的更改。)

如果您正在合并过程中,您可以随时中止它

git merge --abort