Git"你还没有完成你的合并",没有任何承诺?

Tow*_*wer 62 git

每当我尝试推入Git时,我得到这个:

You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.
Run Code Online (Sandbox Code Playgroud)

跑步git status我得到:

# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

或者跑步git ls-files -u我一无所获.

跑步git add .和再次尝试没有任何区别.

这是怎么回事?

Tow*_*wer 109

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


dah*_*byk 62

你最终得到一个空的合并提交(两个父母)或只是一个空提交?在后一种情况下,您可能已删除.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
Run Code Online (Sandbox Code Playgroud)

如果你没有看到这个并且仍然收到MERGE_HEAD警告,那么就会搞砸了一些东西,你应该只是--abort回到一个干净的状态.

评论的附加细节

在合并,混帐会在git的文件夹的根目录(旁边HEAD,ORIG_HEAD,大概FETCH_HEAD等),一个MERGE_HEAD文件跟踪有关正在进行的合并(具体的SHA(S)提交(S信息)被合并到当前的HEAD中).如果删除它,Git将不再认为合并正在进行中.显然,如果合并确实在进行中,那么您不希望删除此文件.

  • 在合并期间,git在`.git`文件夹的根目录(在`HEAD`,`ORIG_HEAD`旁边,可能是'FETCH_HEAD`等)创建一个`MERGE_HEAD`文件,以跟踪有关正在进行的合并的信息(具体来说,提交的SHA(s)被合并到当前的"HEAD"中.如果删除它,Git将不再认为合并正在进行中.显然,如果`merge`真的_is_正在进行中,那么你不想删除这个文件. (3认同)
  • 对于我来说,这个解决方案似乎比提交空合并更方便,因为这种情况经常发生在git中. (2认同)

And*_*nov 12

我的生命保护是git reset命令.