Git Linux

Git: Automatic merge failed — конфликт слияния

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Откройте файлы с маркерами конфликта, выберите нужный код и выполните commit.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Как разрешить конфликт
  5. Быстрый выбор стороны
  6. Отмена и повтор
  7. Профилактика

#Что означает ошибка

Сообщение
merge conflict

«Automatic merge failed; fix conflicts and then commit the result» — Git не смог объединить изменения, потому что обе ветки правили одни и те же строки. Это нормальная ситуация, не авария, и решается вручную.

git status покажет файлы в состоянии both modified: в них нужно выбрать нужный вариант.

Если вы не готовы разбираться, слияние можно безопасно отменить командой git merge --abort.

Откройте файлы с маркерами конфликта, выберите нужный код и выполните commit.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Конфликт правокОдин участок.Проявляется как «merge conflict» или близкий по смыслу сбой.Разрешите.
Устаревшая веткаРасхождение.Проявляется как «merge conflict» или близкий по смыслу сбой.Rebase.
АвтослияниеФайл.Проявляется как «merge conflict» или близкий по смыслу сбой.Вручную.
Бинарный файлКонфликт.Проявляется как «merge conflict» или близкий по смыслу сбой.Выберите версию.

#Пошаговое решение

  1. Посмотрите список файловВ терминале того репозитория, где вы запускали merge/pull, выполните git status и git diff --name-only --diff-filter=U. Git покажет файлы с неразрешёнными конфликтами; перед редактированием сохраните свои незакоммиченные изменения и копию критичных файлов. Если Git показывает You are in the middle of a merge, это активное слияние; при состоянии rebase или cherry-pick порядок завершения иной. Не запускайте следующий git pull, пока конфликт не разобран.
  2. Откройте файлы и найдите маркерыОткройте один конфликтующий файл в VS Code через панель «Проводник» либо щёлкните по файлу в панели «Контроль версий». В обычном тексте найдите блоки <<<<<<<, =======, >>>>>>>: по сторонам стоят две версии фрагмента. Убедитесь, что понимаете назначение обеих; для двоичных файлов текстовых маркеров не будет, решение о нужной версии принимают отдельно. В графическом редакторе могут быть кнопки «Принять текущее», «Принять входящее», «Принять оба» — проверяйте содержимое, а не кликайте случайно.
  3. Выберите нужный код и удалите маркерыСравните конфликтующий фрагмент с задачей проекта и аккуратно сформируйте итоговый код, сохраняя нужные изменения обеих веток. Удалите только технические маркеры после разрешения соответствующего конфликта. Для файлов кода проверьте синтаксис, импорты и отсутствие повторяющихся определений; в VS Code сохраните Ctrl+S. Если не уверены в выборе, попросите автора изменения разъяснить назначение участка; автоматический выбор «ours» или «theirs» может потерять изменения.
  4. Добавьте файлы в индексПосле разрешения всех конфликтов выполните git status: файлы не должны оставаться в состоянии both modified. Добавьте проверенные пути по одному: git add путь/к/файлу, заменив путь фактическим; используйте git diff --cached и git diff --check для проверки подготовленного содержимого. Не выполняйте git add . вслепую, чтобы не включить секреты, временные файлы или посторонние изменения. Запустите тесты проекта перед созданием итогового коммита.
  5. Завершите слияниеЕсли был именно git merge, после проверки выполните git commit и сохраните сообщение слияния; если git status предлагает git merge --continue, допускается эта команда. Для rebase используйте git rebase --continue, а для cherry-pick — git cherry-pick --continue; их нельзя смешивать. При необходимости отказаться от текущего незавершённого слияния используйте git merge --abort после оценки незакоммиченных изменений. Успех — git status без незавершённых конфликтов и успешный запуск тестов.

#Как разрешить конфликт

Откройте файл: Git расставляет маркеры <<<<<<< HEAD, =======, >>>>>>> ветка. Между первым и вторым — ваш вариант, между вторым и третьим — чужой. Оставьте нужный код (или объедините), удалите маркеры. Затем git add файл, после того как разрешены все файлы — git commit (сообщение по умолчанию подойдёт). Для удобства используйте git mergetool или встроенные редакторы VS Code («Accept Current / Incoming / Both»).

#Быстрый выбор стороны

Взять версию целиком: git checkout --ours файл (ваша ветка) или git checkout --theirs файл (входящая), затем git add файл. Для всего слияния сразу: git merge -X ours ветка или -X theirs, но проверьте результат — выбираются только спорные участки.

#Отмена и повтор

Отменяйте только незавершённое слияние командой git merge --abort после проверки git status. После уже созданного коммита не используйте вслепую git reset --hard ORIG_HEAD: он может безвозвратно убрать локальные изменения и повлиять на общую историю. Сначала выясните, опубликован ли коммит, и выберите согласованную процедуру git revert либо восстановление на отдельной ветке. Для rebase используется git rebase --abort, а продолжение — git rebase --continue.

#Профилактика

Делайте небольшие коммиты, часто синхронизируйтесь, не форматируйте целые файлы без необходимости (это порождает конфликты), договаривайтесь о зонах ответственности. Бинарные файлы не сливаются автоматически: выбирайте версию через --ours/--theirs. Справка: git-scm.com/docs/git-merge.

Linux · Терминал (Bash)Команда
В команде git add замените заглушку настоящим путём. Для rebase/cherry-pick нужны другие команды continue; выполняйте по одной после диагностики.
git status
git diff --name-only --diff-filter=U
# После ручного исправления каждого файла:
git add ПУТЬ_К_ИСПРАВЛЕННОМУ_ФАЙЛУ
git diff --cached
git diff --check
# Только если статус говорит о незавершённом MERGE:
git merge --continue

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.