如何完成文件合并?

115

在Git中合并文件后,我尝试拉取存储库,但出现错误:

您尚未完成合并。(MERGE_HEAD存在)

如何结束合并?

5个回答

99

检查您的代码库状态(git status)。每个未合并的文件(在您自己解决冲突后)都应该被添加(git add),如果没有未合并的文件,则应该 git commit


12
如果一切都已提交(git status 显示干净的工作目录),但仍然出现上述错误,该怎么办? - Marius Soutier
1
@Marius 请确保运行标准的 git status 命令,而不是一些过滤任何消息的别名。在当前版本中,当您运行 git status 命令时,它会显示您应该执行的 "完成合并" 操作。如果您绝对确定已经合并了所有内容,并且不会丢失任何东西,那么您可以简单地删除 .git/MERGE* 中的文件,这些文件存储了您尝试合并的内容以及该合并的默认提交消息。 - MBO
1
谢谢,那最终是我所做的,但不知何故,这似乎有缺陷。如果你合并并提交了所有内容,怎么可能存在MERGE_HEAD呢? - Marius Soutier
2
是的,我刚遇到了跟Marius一样的问题。我已经进行了合并操作,解决了冲突,但现在没有提交的内容(不知何故)。只能手动删除MERGE*文件,就像建议的那样。 - Simon East
@johndpope power("tnx", 100) - knagode

36

注意和更新:

自从Git1.7.4(2011年1月)起,你可以使用git merge --abort来终止正在进行的合并,它等同于"git reset --merge"。

但是,如果您想完成合并,而某些东西似乎没有被添加,那么简单粗暴的rm -rf .git/MERGE*可能足以让Git忘记当前的合并。


如果你移除MERGE_HEAD,那么生成的提交只会有一个父节点,这样你就无法得到合并分支的历史记录了。 - Jason Goemaat
考虑到我们试图中止合并,因此不会有“结果提交”。 - VonC

29

我发现最简单的解决方案是:

git commit -m "fixing merge conflicts"
git push

实际上对我来说,-m 没有起作用,没带 -m 时反而起作用了。 - Aleksandar Pavić
@Muaz-Al-Jarhi 你应该看一下 user3127648 的回答 - SebMa
-m 只是包含消息的标志。 - atamata

5

我刚刚执行了以下操作:

git merge --continue

在此时,vi被启动以编辑合并注释。快速执行 :wq 命令后,合并就完成了。


:wq 是用于 vim 编辑器的命令。注意:有些人可能使用 nano 编辑器或其他编辑器。 - theQuestionMan
1
好观点。虽然我提到了vi启动 - Stan

2
如果您在SourceTree中遇到此错误,请转至操作>解决冲突>重新启动合并。
使用的SourceTree版本为1.6.14.0。

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