Git“你还没有完成你的合并”,没有什么可提交的?

无论何时我尝试在 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我什么都得不到。

Running git add .and trying again makes no difference.

怎么了?

92670 次浏览

好吧,我终于找到了答案: git commit -m "Test"显然修复了这一点。结果是一个没有任何更改的空提交。甚至 Github 也显示了一个空提交,但它是有效的。

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

更新: 不需要手动删除 MERGE_HEAD,也可以使用 git merge --abort(到 git 1.7.4为止)或 git reset --merge(到 git 1.6.2为止)。

同样值得一提的是,至少在 git1.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 文件夹(挨着 HEAD,ORIG _ HEAD,可能是 FETCH _ HEAD,等等)来跟踪正在进行的合并的相关信息(具体来说,就是合并到当前 HEAD 中的提交的 SHA)。如果删除它,Git 将不再认为合并正在进行。显然,如果合并确实在进行中,那么您不会希望删除该文件。

使用 git reset命令,不带参数。 Docs