Как завершить слияние файла?


104

После того, как я объединил файл в Git, я попытался вытащить репозиторий, но возникла ошибка:

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

Как завершить слияние?

Ответы:


94

Проверьте статус ( git status) вашего репозитория. Каждый не объединенный файл (после того, как вы разрешите конфликты самостоятельно) должен быть добавлен ( git add), а если нет объединенного файла, вы должныgit commit


11
Но что, если все зафиксировано ( git statusотображается чистый рабочий каталог), а указанная выше ошибка все еще возникает?
Мариус Сутье,

1
@Marius Убедитесь, что вы используете стандартный, git statusа не какой-то псевдоним, который отфильтровывает любые сообщения. В текущей версии, когда вы запускаете git status, он показывает вам сообщение, что вы должны сделать, чтобы «завершить слияние». И если вы абсолютно уверены, что все слито и ничего не потеряете, то вы можете просто удалить файлы в .git / MERGE *, в которых хранится то, что вы пытались объединить, и сообщение фиксации по умолчанию для этого слияния
MBO

1
Спасибо, вот что я в итоге сделал, но почему-то это кажется глючным. Как может существовать MERGE_HEAD, если вы все слили и зафиксировали?
Мариус Сутье,

2
Да, у меня была та же проблема, что и у Мариуса, я выполнил слияние, разрешил конфликты, но теперь нечего фиксировать (каким-то образом). Пришлось вручную удалить файлы MERGE *, как было предложено.
Саймон Ист

@johndpope power ("tnx", 100)
knagode

32

Обратите внимание и обновите:

Начиная с Git1.7.4 (январь 2011 г.), у вас есть git merge --abortсиноним « git reset --merge», когда выполняется слияние.

Но если вы хотите завершить слияние, а что-то еще нечего добавить, тогда rm -rf .git/MERGE*Git может быть достаточно грубым , чтобы забыть о текущем слиянии.


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

@JasonGoemaat, учитывая, что мы пытаемся прервать слияние, в любом случае не будет "результирующей фиксации".
VonC

21

Самое простое решение, которое я нашел для этого:

git commit -m "fixing merge conflicts"
git push

На самом деле для меня -m не работал, он работал без -m.
Александар Павич

@ Muaz-Al-Jarhi Вы должны посмотреть ответ
user3127648

Не могли бы вы объяснить, что это делает?
Billal Begueradj

-m - это просто флаг для включения сообщения
атамата

1

Если вы столкнулись с этой ошибкой в ​​SourceTree, перейдите в Действия> Разрешить конфликты> Перезапустить слияние.

Используемая версия SourceTree - 1.6.14.0


0

У меня была такая же ошибка, и я следил за статьей, найденной в Google, решает мою проблему. Вы не завершили слияние


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