Вы не завершили свое слияние (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*

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

knagode
источник
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

fantabolous
источник
Спасибо, что задали этот вопрос для тех из нас, кто имеет более простой тип проблемы. «Состояние 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 из необходимой ветки.
Rohith
источник
3

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

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

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

git cherry-pick --abort
Космо Скриванич
источник
2

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

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

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

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

Terence
источник
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
Plus1
источник
3
Прежде всего, это удалит все изменения рабочего каталога. Также жестко закодированная версия не полезна, возможно, что-то вроде HEAD ^ лучше.
Entomo
@ Plus1 Это именно то, что мне нужно - удалить мои неправильные локальные коммиты и применить изменения в отношении измененного исходного кода. Спасибо за ваш ответ!
amuliar
Это вызвало проблему в моем случае
Шафик