Git“您尚未完成合并”,还有什么要提交的?


69

每当我尝试推入Git时,我都会得到:

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 .试没有区别。

这是怎么回事?

Answers:


116

好吧,我终于找到答案了:git commit -m "Test"显然已经解决了这个问题。结果是一个空的提交,没有任何更改。甚至Github都显示了一个空提交,但它可以工作。


1
对我来说,这是作为标记合并点的提交而显示的,因此,诸如“将开发人员合并到主服务器”之类的消息比“测试”更合适。
杰里米·赫尔曼

1
哇。现在任何人都可以解释为什么这行得通,但git commit行不通吗?
user1205577 2014年

73

您最终得到的是空合并提交(两个父母)还是只是一个空提交?在后一种情况下,您可以删除.git/MERGE_HEAD

更新:除了MERGE_HEAD手动删除,您还可以使用git merge --abort从git 1.7.4开始)或git reset --merge从git 1.6.2开始)。

还值得一提的是,至少从git 1.8.3起(可能更早吗?),status如果正在进行实际的合并并需要提交(--no-commit例如,如果指定了),则应该看到这样的消息:

# 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文件夹的根目录(HEAD,ORIG_HEAD,可能是FETCH_HEAD等旁边)中创建一个MERGE_HEAD文件,以跟踪有关正在进行的合并的信息(特别是提交的SHA) )被合并到当前HEAD中)。如果删除它,Git将不再认为正在进行合并。显然,如果合并确实在进行中,则您不想删除此文件。


3
对于我来说,此解决方案似乎比提交空合并更方便,因为这种情况在git中经常发生。
2013年

谢谢你 希望我真的了解。有时间的时候,我猜我会仔细阅读文档。
泰勒

3
在合并,Git会创建一个MERGE_HEAD在根文件.git夹(旁边HEADORIG_HEAD大概FETCH_HEAD等),以跟踪有关进展)提交(S)存在的合并(具体而言,SHA(一个或多个信息合并到当前HEAD)。如果删除它,Git将不再认为正在进行合并。显然,如果merge真的在进步,那么你不会想删除这个文件。
dahlbyk

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.