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

104

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

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

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

Муаз Аль-Джархи
источник

Ответы:

94

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

MBO
источник
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 может быть достаточно грубым , чтобы забыть о текущем слиянии.

VonC
источник
если вы удалите MERGE_HEAD, не будет ли у результирующего коммита только один родитель, чтобы у вас не было истории объединенной ветки?
Джейсон Гоэмаат
@JasonGoemaat, учитывая, что мы пытаемся прервать слияние, в любом случае не будет "результирующей фиксации".
VonC
21

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

git commit -m "fixing merge conflicts"
git push
user3127648
источник
На самом деле для меня -m не работал, он работал без -m.
Александар Павич
@ Muaz-Al-Jarhi Вы должны посмотреть ответ
user3127648
Не могли бы вы объяснить, что это делает?
Billal Begueradj
-m - это просто флаг для включения сообщения
атамата
1

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

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

Решения Cebu CM
источник
0

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

Нирджу
источник
Ссылка на решение всегда приветствуется, но, пожалуйста, добавьте важную информацию к своему ответу, поскольку ссылка может быть устаревшей.
slfan