Что делать при конфликте слияния в git и как его разрешить?
Сделал git merge и получил CONFLICT и «Automatic merge failed». В файлах появились странные <<<<<<< и =======. Что это и как разрешить конфликт слияния, чтобы продолжить?
2 ответа
Не паникуй — конфликт это нормально. Он возникает, когда в одном и том же месте файла обе ветки внесли разные правки, и git не знает, какую оставить.
Шаг 1. Посмотри, какие файлы конфликтуют:
git status
Они будут в разделе «both modified».
Шаг 2. Открой такой файл. Внутри увидишь маркеры:
<<<<<<< HEAD
твоя версия (текущая ветка)
=======
версия из вливаемой ветки
>>>>>>> feature
Твоя задача — оставить правильный итоговый код и удалить все три строки-маркера (<<<<<<<, =======, >>>>>>>). Можно взять один из вариантов, или объединить оба вручную.
Шаг 3. Помечаешь файл как решённый и завершаешь слияние:
git add конфликтный_файл.py
git commit
git add говорит git «я разрулил этот файл». Когда все конфликты добавлены — git commit завершит merge.
Если всё пошло не так и хочешь отменить слияние целиком:
git merge --abort
Частая ошибка: закоммитить, забыв удалить маркеры <<<<<<</=======. Тогда они попадут прямо в код и всё сломается. Перед git add обязательно проверь, что маркеров в файле не осталось.
Полезный лайфхак: многие редакторы (VS Code и др.) показывают конфликт с кнопками «Accept Current / Accept Incoming / Accept Both» прямо над блоком. Это удобнее, чем чистить маркеры руками.
Если запутался — не бойся откатиться: git merge --abort вернёт всё в состояние до слияния, и можно попробовать заново на свежую голову.