撤销合并 git merge,出现 merge.renameLimit 警告和冲突后的处理方法

16

我正在尝试将一个开发分支合并到主分支并压缩提交记录。

stefanos-imac:trunk borini$ git merge --squash devel
CONFLICT (content): Merge conflict in test1
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your merge.renamelimit variable to at least 2224 and retry the command.
Squash commit -- not updating HEAD
Automatic merge failed; fix conflicts and then commit the result.

没问题。

stefanos-imac:trunk borini$ git config merge.renameLimit 999999

然后我尝试取消合并操作,再使用更高的限制重新进行合并

stefanos-imac:trunk borini$ git merge --abort
fatal: There is no merge to abort (MERGE_HEAD missing).

好的,也许我需要按照指示重新调用合并命令。

stefanos-imac:trunk borini$ git merge --squash devel
fatal: 'merge' is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as
appropriate to mark resolution and make a commit, or use 'git commit -a'.

哦,Git,你为什么这么讨厌?

更重要的是,有没有人知道如何摆脱这种情况?

3个回答

24

嗯,git reset --hard origin/master是什么?


8
现代撤销合并的方法是(但仅在MERGE_HEAD存在时才有效):
git merge --abort

还有一种稍微老一点的方法,在这种情况下也可以使用(MERGE_HEAD丢失):

git reset --merge

接受的答案中描述的老派方法(警告:将丢弃您所有的本地更改):

git reset --hard

请注意,只有在存在MERGE_HEAD的情况下,git merge --abort才等同于git reset --merge。这可以在git合并命令的帮助文档中阅读到。
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

如果合并失败,且没有 MERGE_HEAD,可以使用 git reset --merge 撤销失败的合并,但不一定能使用 git merge --abort


1
git reset --merge,这对于描述的MERGE_HEAD丢失问题对我很有效。 - Sr. Libre

4

git merge --abort 命令也可以达到同样的效果。比输入完整的 git reset 命令要快一些。

同时,Abort 命令也适用于 rebasecherry-pick


4
这个特定的案例清楚地表明了合并 "--abort" 操作失败了,我亲眼目睹了。总是很难过看到中止失败 :( - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接