Git“您尚未完成合并”且没有要提交的内容?

81
无论何时我尝试在Git中进行push操作,我都会得到以下信息:
You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.

运行 git status 我得到以下结果:

# On branch master
nothing to commit (working directory clean)

当我运行git ls-files -u时,我什么也没得到。

运行git add .然后再试也没有任何区别。

出了什么问题?

3个回答

127

好的,我最终找到了答案:git commit -m "Test" 似乎解决了这个问题。结果是一个没有任何变化的空提交。即使Github显示为空提交,但它确实起作用。


1
对我来说,这显示为提交标记合并点,因此像“将dev合并到master”这样的消息比“测试”更合适。 - Jeremy Herrman
1
哇,现在有人能解释一下为什么这个有效而“git commit”不行吗? - user1205577
哇,太棒了,它起作用了。 - undefined

84

你最终得到了一个空合并提交(两个父提交)还是只有一个空提交?如果是后者,你可以删除.git/MERGE_HEAD

更新:与其手动删除MERGE_HEAD,你也可以使用git merge --abort截至git 1.7.4)或git reset --merge截至git 1.6.2)。

值得一提的是,至少在git 1.8.3(可能更早的版本)中,如果正在进行实际的合并并需要提交(例如,如果你指定了--no-commit),则应该会看到如下所示的status消息:

# On branch master
# All conflicts fixed but you are still merging.
#   (use "git commit" to conclude merge)
#
nothing to commit, working directory clean

如果您没有看到这个警告,并且仍然收到 MERGE_HEAD 警告,那么说明出现了问题,您应该考虑 --abort 以返回到一个干净的状态。 评论中的附加细节 在合并过程中,git会在 .git 文件夹的根目录中创建一个 MERGE_HEAD 文件(与 HEAD、ORIG_HEAD、可能的 FETCH_HEAD 等文件并列),以跟踪有关正在进行的合并的信息(具体来说,是合并到当前 HEAD 的提交的 SHA)。如果删除它,Git 将不再认为有合并正在进行中。显然,如果确实有合并正在进行,则不希望删除此文件。

4
对我而言,这种解决方案似乎比在 Git 中提交空合并要更方便,因为这种情况经常发生。 - C.M.
谢谢这个。但愿我真的能理解它。等我有时间了,我会浏览文档的。 - Taylor
4
在合并期间,Git会在.git文件夹的根目录(与HEADORIG_HEAD、可能的FETCH_HEAD等在一起)创建一个MERGE_HEAD文件,以跟踪合并进程中的信息(具体来说是正在合并到当前HEAD的提交的SHA)。如果您删除了该文件,则Git将不再认为有合并正在进行。显然,如果确实正在进行“合并”,则不应删除此文件。 - dahlbyk

25
使用git reset命令,不带参数。 文档


对我来说,参数 --merge 是必要的。 - FrugalResolution

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