如何撤消有冲突的git merge


785

我在树枝上mybranch1mybranch2是从中分叉mybranch1并进行更改的mybranch2

然后,在上mybranch1,我已经完成了git merge --no-commit mybranch2 它表明合并时存在冲突。

现在,我想放弃所有内容(merge命令),以便mybranch1恢复到之前的状态。我不知道该怎么办。


Answers:


1355

最新的Git:

git merge --abort

这将尝试将您的工作副本重置为合并之前的任何状态。这意味着它应该还原合并之前的所有未提交的更改,尽管它不能始终可靠地进行还原。通常,您无论如何都不应与未提交的更改合并。

1.7.4版之前的版本:

git reset --merge

这是较旧的语法,但与上述语法相同。

在1.6.2之前的版本:

git reset --hard

删除所有未提交的更改,包括未提交的合并。有时,即使在支持上述命令的较新版本的Git中,此行为也很有用。


1
但是对于git的旧版本,这是使用方式
Anshul 2011年

7
有时,您git reset --merge甚至仍需要在最新版本中使用。我在git 2.2.1 git merge --abortgit reset --merge成功(并且做了正确的事情)出错(不做任何更改)。
Theodore Murdock

我发现我需要做的git merge --abort,然后git reset --merge有从弹出我的藏匿automerge冲突时。
法老王大厨

1
通常git merge --abort对我有用,但是我发现自己处于分离HEAD状态的情况,并且我的一个文件处于“两个修改”状态。我想放弃所有内容并返回分支,我不得不这样做git reset --hardgit merge --abort告诉我没有要中止的合并(缺少MERGE_HEAD)。
yano

有时git merge --abort无法将您带回以前的状态,在这种情况下,“旧语法” git reset --hard就可以解决问题。
凯文·斯图尔特

130

实际上,值得注意的git merge --abort是,它仅等同于存在的git reset --merge给定MERGE_HEAD值。可以在git help for merge命令中阅读。

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

合并失败后,如果MERGE_HEAD没有合并失败,则可以(git reset --merge但不一定)撤消失败的合并git merge --abort因此它们不仅是同一事物的新旧语法

就个人而言,我发现git reset --merge在日常工作中更有用。


2
谢谢,此信息非常有帮助。我有一个合并,该合并始于git stash apply错误的分支,git merge --abort但没有执行任何操作(否MERGE_HEAD),同时git reset --merge完成了窍门。
geomaster's

4
我已经看到大约10个人说这git merge --abort是新命令,git reset --merge而我遇到了与@geomaster相同的问题,这非常有帮助,谢谢!
汤姆(Tom)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.