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

1701

我创建了一个名为“f”的分支,并在主分支上进行了检出。 当我尝试使用git pull命令时,我收到了以下消息:

You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.

当我尝试执行git status时,它给出了以下结果:

On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 13 different commit(s) each, respectively.
#
# Changes to be committed:
#
#   modified:   app/assets/images/backward.png
#   modified:   app/assets/images/forward.png
#   new file:   app/assets/images/index_background.jpg
#   new file:   app/assets/images/loading.gif
#   modified:   app/assets/images/pause.png
#   modified:   app/assets/images/play.png
#   new file:   app/assets/javascripts/jquery-ui-bootstrap.js
#   new file:   app/assets/stylesheets/jquery-ui-bootstrap.css
#   modified:   app/controllers/friends_controller.rb
#   modified:   app/controllers/plays_controller.rb
#   modified:   app/mailers/invite_friends_mailer.rb
#   modified:   app/mailers/send_plays_mailer.rb
#   modified:   app/mailers/shot_chart_mailer.rb
#   modified:   app/views/friends/show_plays.html.erb
#   modified:   app/views/layouts/application.html.erb
#   modified:   app/views/plays/_inbox_table.html.erb
#   modified:   app/views/plays/show.html.erb
#   modified:   app/views/welcome/contact_form.html.erb
#   modified:   app/views/welcome/index.html.erb
#   modified:   log/development.log
#   modified:   log/restclient.log
#   new file:   tmp/cache/assets/C1A/C00/sprockets%2Fb7901e0813446f810e560158a1a97066
#   modified:   tmp/cache/assets/C64/930/sprockets%2F65aa1510292214f4fd1342280d521e4c
#   new file:   tmp/cache/assets/C73/C40/sprockets%2F96912377b93498914dd04bc69fa98585
#   new file:   tmp/cache/assets/CA9/090/sprockets%2Fa71992733a432421e67e03ff1bd441d8
#   new file:   tmp/cache/assets/CCD/7E0/sprockets%2F47125c2ebd0e8b29b6511b7b961152a1
#   modified:   tmp/cache/assets/CD5/DD0/sprockets%2F59d317902de6e0f68689899259caff26
#   modified:   tmp/cache/assets/CE3/080/sprockets%2F5c3b516e854760f14eda2395c4ff2581
#   new file:   tmp/cache/assets/CED/B20/sprockets%2F423772fde44ab6f6f861639ee71444c4
#   new file:   tmp/cache/assets/D0C/E10/sprockets%2F8d1f4b30c6be13017565fe1b697156ce
#   new file:   tmp/cache/assets/D12/290/sprockets%2F93ae21f3cdd5e24444ae4651913fd875
#   new file:   tmp/cache/assets/D13/FC0/sprockets%2F57aad34b9d3c9e225205237dac9b1999
#   new file:   tmp/cache/assets/D1D/DE0/sprockets%2F5840ff4283f6545f472be8e10ce67bb8
#   new file:   tmp/cache/assets/D23/BD0/sprockets%2F439d5dedcc8c54560881edb9f0456819
#   new file:   tmp/cache/assets/D24/570/sprockets%2Fb449db428fc674796e18b7a419924afe
#   new file:   tmp/cache/assets/D28/480/sprockets%2F9aeec798a04544e478806ffe57e66a51
#   new file:   tmp/cache/assets/D3A/ED0/sprockets%2Fcd959cbf710b366c145747eb3c062bb4
#   new file:   tmp/cache/assets/D3C/060/sprockets%2F363ac7c9208d3bb5d7047f11c159d7ce
#   new file:   tmp/cache/assets/D48/D00/sprockets%2Fe23c97b8996e7b5567a3080c285aaccb
#   new file:   tmp/cache/assets/D6A/900/sprockets%2Fa5cece9476b21aa4d5f46911ca96c450
#   new file:   tmp/cache/assets/D6C/510/sprockets%2Fb086a020de3c258cb1c67dfc9c67d546
#   new file:   tmp/cache/assets/D70/F30/sprockets%2Facf9a6348722adf1ee7abbb695603078
#   new file:   tmp/cache/assets/DA3/4A0/sprockets%2F69c26d0a9ca8ce383e20897cefe05aa4
#   new file:   tmp/cache/assets/DA7/2F0/sprockets%2F61da396fb86c5ecd844a2d83ac759b4b
#   new file:   tmp/cache/assets/DB9/C80/sprockets%2F876fbfb9685b2b8ea476fa3c67ae498b
#   new file:   tmp/cache/assets/DBD/7A0/sprockets%2F3640ea84a1dfaf6f91a01d1d6fbe223d
#   new file:   tmp/cache/assets/DC1/8D0/sprockets%2Fe5ee1f1cfba2144ec00b1dcd6773e691
#   new file:   tmp/cache/assets/DCC/E60/sprockets%2Fd6a95f601456c93ff9a1bb70dea3dfc0
#   new file:   tmp/cache/assets/DF1/130/sprockets%2Fcda4825bb42c91e2d1f1ea7b2b958bda
#   new file:   tmp/cache/assets/E23/DE0/sprockets%2Fb1acc25c28cd1fabafbec99d169163d3
#   new file:   tmp/cache/assets/E23/FD0/sprockets%2Fea3dbcd1f341008ef8be67b1ccc5a9c5
#   modified:   tmp/cache/assets/E4E/AD0/sprockets%2Fb930f45cfe7c6a8d0efcada3013cc4bc
#   new file:   tmp/cache/assets/E63/7D0/sprockets%2F77de495a665c3ebcb47befecd07baae6
#   modified:   tmp/pids/server.pid
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   Coachbase/
#   log/development.log.orig
#   log/restclient.log.orig

我该怎么办?


2
我的问题是,在解决冲突后,没有任何更改需要提交,所以我不得不像这里建议的那样使用 git commit --no-edit - Gangula
24个回答

2937
问题是你之前的拉取失败了,无法自动合并并进入冲突状态。而且在下一次拉取之前,冲突没有得到正确解决。
1. 撤销合并并重新拉取。 要撤销合并: git merge --abort [适用于git版本1.7.4及以上] git reset --merge [适用于早期git版本]
2. 解决冲突。
3. 不要忘记添加和提交合并结果。
4. 现在应该可以正常使用git pull命令了。

2
我尝试过并且在文件中出现了冲突(当pull时)自动合并app/views/layouts/application.html.erb 自动合并log/development.log 冲突(内容):log/development.log中的合并冲突 自动合并log/restclient.log 冲突(内容):log/restclient.log中的合并冲突 自动合并失败;解决冲突,然后提交结果。我修复了指定的本地文件,然后尝试了'git pull'无法拉取,因为您有未合并的文件。 请在工作树中修复它们,然后使用“git add/rm <file>”适当地标记解决方案,或使用“git commit -a”。 - Ankit Suri
2
@AnkitSuri,解决冲突后,您是否将它们暂存并提交了? - Karthik Bose
1
我尝试了一下,它帮助我重新进入了工作状态。回退后,我尝试了 "git mergetool"。它直接关联到合并工具。 - CoDe
11
无法运行:[env]$ git merge --abort fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge.翻译:无法执行该操作:“[env]$ git merge --abort 致命错误:您尚未完成合并(存在MERGE_HEAD)。在合并之前,请提交您的更改。” - user1429980
1
强调第三行非常有帮助! - Karina
显示剩余9条评论

146
如果您确定已经解决了所有的合并冲突:
rm -rf .git/MERGE*

错误将会消失。


2
如果你移除MERGE_HEAD,那么生成的提交只会有一个父节点,这样你就无法得到合并分支的历史记录了。 - Jason Goemaat
1
在我的情况下,我暂时合并了多个尚未被接受的PR。 我不打算将这些合并提交到功能分支上,我只需要它们在开发过程中使用。 - Andy
1
我已经解决了我的冲突,但仍然遇到了这个错误。所以这个命令对我起作用了。 - Sibgha
这让我免于陷入恶性合并冲突循环。 - Sledge
对我来说失败了:fatal: pathspec '.git/MERGE*' did not match any files - Mojtaba
@Mojtaba,你可能没有在你的项目根目录下。 - clemsciences

105

值得一提的是,可能有许多情况会出现消息“您还没有完成合并(存在MERGE_HEAD)”,因为许多人可能是在搜索此消息后才到达此页面的。解决方法将取决于您是如何到达此处的。

git status始终是一个有用的起点。

如果您已经满意地合并了内容,但仍然收到此消息,那么可能只需要执行:

git add file
git commit

但是,这真的取决于情况。在尝试任何操作之前,了解基础知识是个好主意(与Terence发布的相同链接):Git - 基本合并冲突


7
谢谢你的提问,对于像我这样遇到简单问题的新手来说,“Git状态”就是所需的提醒,它让我记起解决合并冲突的最后一步是使用简单命令“git commit”。请放心,我的翻译不会改变原文的意思,并会尽量使内容更加流畅易懂。 - Dana
这真的很有帮助,检查后,我发现我需要添加一个我无意中修改的文件。 - Adesoft

94

我认为这是正确的方法:

git merge --abort

git fetch --all

那么,你有两个选择:

git reset --hard origin/master

或者,如果您在其他分支上:

git reset --hard origin/<branch_name>

5
只有 "git merge --abort" 可以本身解决问题,然后再运行 "git pull"。 - luky
2
git reset --hard origin/<branch_name> 对我有用。谢谢! - knigalye
这些命令会删除你所有的本地更改。我们不需要这样做! - Oltion Driza

71

中止对我没有起作用。所以我不得不继续,这就是对我起作用的方法:

git merge --continue

2
这解决了我的问题,但我很想知道我的分支是如何进入这种状态的。 - Alex Dresko
1
@AlexDresko,可能是因为在解决冲突后,你的分支和你尝试合并的内容之间没有差异。 - Aakash
1
这对我有用。我执行了 merge --abortreset --merge,但仍然无法拉取。 - Noah
2
我总是遇到这个错误,最终不得不查找答案。但它总是对我有用。 - Noah
1
只有这个对我也起作用!谢谢 @Aakash。 - rodolfo_r

22

尝试

git reset --hard origin/trunk

'trunk'是我正在尝试到达的分支。

我不知道这是如何工作的,也不知道为什么会这样。这可能与我做了一些提交导致我的拉取请求强制执行合并有关。


这对我来说与上面的答案结合起来效果很好。 - darth vader

16

提交合并更改解决了我的问题:

git commit -m "commit message"

13

我解决了冲突并提交了代码,但在git push时仍然收到错误消息。

所有冲突都已解决,但您仍在合并中。
(使用“git commit”来结束合并)

我执行了以下步骤以解决此错误:

rm -rf .git/MERGE*
git pull origin branch_name 
git push origin branch_name

push 在结尾的作用是什么? - Mark Storer

13
git merge --abort

这段代码解决了我的问题。


11

只需运行此命令以中止冲突:

git merge --abort

之后,您可以拉取您的项目:

git pull origin YOUR_BRANCH

测试使用的 Git 版本为 2.25.1


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