Вы не завершили свое слияние (MERGE_HEAD существует)


1037

Я сделал ветку под названием «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

Что мне делать?

Ответы:


1922

ХОРОШО. Проблема в том, что ваше предыдущее извлечение не удалось автоматически объединить и перешло в конфликтное состояние. И конфликт не был решен должным образом до следующей попытки.

  1. Отмените объединение и потяните снова.

    Чтобы отменить слияние:

    git merge --abort [Начиная с версии git 1.7.4]

    git reset --merge [предыдущие версии git]

  2. Разрешите конфликт.

  3. Не забудьте добавить и зафиксировать слияние.

  4. git pull Теперь должно работать нормально.


2
Я попытался и дал мне конфликт в файлах (при извлечении). Автоматическое объединение app / views / layouts / application.html.erb Автоматическое объединение log / development.log CONFLICT (content): Конфликт объединения в log / development.log Автоматическое объединение log / restclient.log CONFLICT (content): конфликт слияния в log / restclient.log Сбой автоматического слияния; исправить конфликты, а затем зафиксировать результат. Я исправил указанные локальные файлы, а затем попробовал «git pull». Извлечь невозможно, потому что вы распаковали файлы. Пожалуйста, исправьте их в рабочем дереве, а затем используйте «git add / rm <file>», чтобы пометить разрешение, или «git commit -a».
Анкит Сури

1
@AnkitSuri, после устранения конфликтов вы их ставили и фиксировали?
Картик Бозе

1
Я попробовал это, и это помогло мне снова войти в поток. После возврата я попробовал "git mergetool". Это напрямую связано с инструментом слияния.
Код

4
Не работает:[env]$ git merge --abort fatal: You have not concluded your merge (MERGE_HEAD exists). Please, commit your changes before you can merge.
user1429980

1
@KartikBose, это действительно сработало. Поскольку я работал над SSH, мне пришлось начать новый сеанс и сделать a git status.
user1429980

98

Если вы уверены, что уже разрешили все конфликты слияний:

rm -rf .git/MERGE*

И ошибка исчезнет.


2
если вы удалите MERGE_HEAD, не будет ли у полученного коммита только один родитель, чтобы у вас не было истории объединенной ветви?
Джейсон Гомаат

2
это то, что я хотел
радитья гумай

1
@JasonGoemaat в моем случае я временно объединяю несколько PR, которые еще не были приняты. Я не планирую фиксировать эти слияния в ветви функций, они мне просто нужны во время разработки.
Энди

Я уже разрешил свои конфликты и все еще получал эту ошибку. Так что команда сработала для меня.
Сибга

Это спасло меня от неприятного цикла слияния.
Санки

68

Я думаю, что стоит упомянуть, что существует множество сценариев, в которых сообщение You have not concluded your merge (MERGE_HEAD exists)может появиться, потому что многие люди, вероятно, пришли на эту страницу после поиска указанного сообщения. Разрешение будет зависеть от того, как вы туда попали.

git status всегда полезная отправная точка.

Если вы уже слили содержимое к своему удовлетворению и все еще получаете это сообщение, это может быть так же просто, как сделать

git add file
git commit

Но опять же, это действительно зависит от ситуации. Это хорошая идея, чтобы понять основы, прежде чем пытаться что-либо (та же ссылка, которую разместил Теренс): Git - Basic Merge Conflicts


Спасибо, что задали этот вопрос для тех из нас, кто имеет более простой тип проблемы. «Состояние Git» было то, что нужно новичку, как я, чтобы напомнить, что последний шаг исправления конфликтного слияния была простая команда «git commit».
Дана

18

Я думаю, что это правильный путь:

git merge --abort

git fetch --all

Тогда у вас есть два варианта:

git reset --hard origin/master

ИЛИ Если вы находитесь в другой ветке:

git reset --hard origin/<branch_name>

2
только git merge --abort работал сам && git pull тогда
Luk

8

Я разрешил конфликты, а также зафиксировал, но все еще получаю это сообщение об ошибке git push

Все конфликты исправлены, но вы все еще сливаетесь.
(используйте git commit для завершения слияния)

Я сделал эти шаги для устранения ошибки:

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

Что делает pushв конце?
Марк Сторер

6

Пытаться

git reset --hard origin/trunk

«ствол» - это ветка, к которой я пытаюсь добраться.

Я не знаю, как и почему это работает. Это было связано с каким-то коммитом, который я сделал, который заставлял мои запросы на слияние выполнять слияние.


5

Попробуйте изменить любой временный файл. Например, просто удалите пробел или добавьте пробел, а затем зафиксируйте и отправьте этот файл.

Git добавить 'временный_обмен_файл'

git commit -m "решение проблем git"

мерзавец происхождение развивается

А затем попробуйте Git Pull,

мерзавец происхождение развивается

Надеюсь, это поможет вам.


4

Blockquote

Если вы пытаетесь вытащить из другой ветки в свою ветку. Если вы видите эту ошибку.

Сначала вы должны попытаться выполнить git commit, а затем перетащить другую ветку в свою.

  1. "мерзавец добавить."
  2. мерзавец совершить
  3. Затем сделайте git pull из необходимой ветки.

3

В моем случае у меня был вишневый кирк, который произвел несколько конфликтов слияния, поэтому я решил не завершать вишневый кирк. Я отменил все свои изменения. Это привело меня в состояние, когда я получил следующую ошибку:

Вы не завершили свое слияние (MERGE_HEAD существует

Чтобы решить эту проблему, я выполнил следующую команду git, которая устранила проблему.

git cherry-pick --abort

2

Лучший подход - отменить слияние и выполнить слияние снова. Часто вы получаете беспорядочный порядок вещей. Попробуй исправить конфликты и погрузись в беспорядок.

Так что отмените это и снова объединитесь.

Убедитесь, что у вас есть соответствующие настройки инструментов diff для вашей среды. Я на Mac и использую DIFFMERGE. Я думаю, что DIFFMERGE доступен для всех сред. Инструкции здесь: Установите DIFF Merge на MAC

У меня есть это полезное решение моих конфликтов: Git Basic-Merge-Conflicts


1

во-первых, используйте git pullдля слияния репозиторий, сохраните изменения git commit -m "your commit". затем повторите ввод .


0

Выполнить слияние изменений решило мою проблему:

git commit -m "commit message"

-12

Это сработало для меня:

git log
`git reset --hard <089810b5be5e907ad9e3b01f>`
git pull
git status

3
Прежде всего, это удалит все изменения рабочего каталога. Также жестко закодированная версия не полезна, возможно, что-то вроде HEAD ^ лучше.
Entomo

@ Plus1 Это именно то, что мне нужно - удалить мои неправильные локальные коммиты и применить изменения в отношении измененного исходного кода. Спасибо за ваш ответ!
amuliar

Это вызвало проблему в моем случае
Шафик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.