Git WindowsLinux

Git: CONFLICT (content): Merge conflict — как разрешить конфликт слияния

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

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

Конфликт слияния Git возникает, когда ветки изменили одни и те же строки. Откройте файлы с маркерами, выберите нужный вариант, выполните git add и git commit, либо отмените слияние командой git merge --abort.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

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

Сообщение
CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result.

Git автоматически объединяет изменения, но если две ветки правили одни и те же строки файла (или один удалил файл, а другой изменил), он останавливается и просит вас решить. Это не ошибка, а штатная ситуация. В конфликтных файлах Git ставит маркеры <<<<<<<, =======, >>>>>>>; ваша задача — оставить корректный вариант, удалить маркеры и завершить слияние коммитом.

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

Возможная причинаКак узнатьЧто делать
Изменены одни и те же строкиОбе ветки правили одно место.В файле маркеры <<<<<<<.Разрешите вручную.
Файл удалён в одной ветке и изменён в другойКонфликт delete/modify.CONFLICT (modify/delete).Выберите: оставить или удалить.
Разные окончания строкCRLF/LF или форматирование.Конфликт на весь файл.Нормализуйте через .gitattributes.
Устаревшая веткаВетка давно не обновлялась.Много конфликтов при слиянии.Чаще обновляйте из основной.

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

  1. Посмотрите состояниеВ терминале редактора VS Code («Терминал» → «Создать терминал») перейдите в папку Git-проекта и выполните git status. Найдите раздел Unmerged paths и список конфликтных файлов. До исправлений сохраните незакоммиченные важные изменения отдельно: конфликт может быть результатом merge, rebase или cherry-pick, и способ завершения у них различается. Команда git diff --name-only --diff-filter=U покажет лишь ещё не разрешённые файлы.
  2. Откройте конфликтный файлВ VS Code откройте нужный конфликтный файл из раздела «Контроль версий» (Ctrl+Shift+G) или из Проводника проекта. При текстовом конфликте найдите <<<<<<<, =======, >>>>>>>: между первыми двумя маркерами находится один вариант, далее — другой. Иногда Git редактор показывает отдельное окно сравнения вместо маркеров. Не удаляйте всё содержимое между маркерами, пока не разберётесь, какие изменения нужны программе.
  3. Выберите вариантДля каждого конфликтного участка сравните оба изменения, историю задачи и соседний код, выберите нужную логику или объедините части в правильном порядке. После редактирования удалите служебные строки-маркеры <<<<<<<, =======, >>>>>>>, сохраните файл и проверьте синтаксис или тесты. Если конфликт касается конфигурации, убедитесь, что сохраняются нужные параметры обеих веток, а не только удобный фрагмент.
  4. Используйте инструментВстроенный редактор слияния VS Code иногда предлагает «Принять текущее», «Принять входящее», «Принять оба» (названия зависят от версии), но сначала внимательно прочитайте обе стороны. Альтернатива — git mergetool, если инструмент настроен заранее. Эти варианты взаимоисключающие; не запускайте разные автоматические средства последовательно без понимания, что они уже переписали в файле.
  5. Отметьте как решённыйПосле того как конкретный файл исправлен и сохранён, из корня проекта выполните git add -- "путь/к/файлу", подставив путь из git status. Повторите для каждого конфликтного файла, затем git status: раздел Unmerged paths должен исчезнуть. Команда git add отмечает исправление, но не подтверждает корректность кода; перед завершением запустите тесты проекта.
  6. Завершите слияниеЕсли выполнялось обычное слияние git merge, после разрешения всех конфликтов запустите git merge --continue (или git commit, если Git просит завершить коммит). Если это git rebase, используйте git rebase --continue, а для cherry-pick — git cherry-pick --continue. Проверьте подсказку git status, прежде чем выбирать команду, и внимательно прочитайте сообщение будущего коммита.
  7. Если запутались — отменитеЕсли вы не понимаете, как объединить изменения, сначала сохраните копии важных незакоммиченных файлов. Для отмены именно слияния git merge --abort; для перебазирования git rebase --abort; для выбора коммита git cherry-pick --abort. Отмена может затронуть незакоммиченные изменения, поэтому не запускайте её наугад. После отмены проверьте git status и уточните у автора второй ветки спорные участки.
  8. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Убраны checkout --ours/--theirs и прочие автоматические перезаписи конфликтного файла
    Linux · Терминал (Bash)Команда
    Убраны checkout --ours/--theirs и прочие автоматические перезаписи конфликтного файла
    # Только диагностика конфликта в корне Git-проекта
    git status
    git diff --name-only --diff-filter=U
    # Затем вручную исправьте файлы и выполните git add -- "реальный/путь"
    # Завершайте с учётом операции: merge --continue ИЛИ rebase --continue
    Вариант 2Как выглядит конфликт в файле.
    Текст
    Как выглядит конфликт в файле.
    <<<<<<< HEAD
    ваш вариант строки
    =======
    вариант из другой ветки
    >>>>>>> feature-branch
  9. Проверьте результатВ корне проекта выполните штатные команды проверки из package.json, Makefile или документации проекта, затем git status и git log -1 --oneline. Только после проверки приложения отправляйте изменения через git push в свою ветку, если у вас есть такие права. Если сервер отвергает push, не используйте --force для общей ветки: проверьте её изменения и согласуйте отдельное слияние.

Ключи --ours и --theirs при слиянии (merge) означают: ours — ваша текущая ветка, theirs — вливаемая. При перебазировании (git rebase) они меняются местами. Чтобы уменьшить число конфликтов, часто подтягивайте основную ветку (git pull --rebase origin main), делайте небольшие коммиты и не форматируйте весь файл без необходимости. Если вы случайно закоммитили маркеры, найдите их поиском grep -rn "<<<<<<<" .. Для сложных случаев используйте git rerere, который запоминает ваши решения. Справка — Pro Git: слияние.

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

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

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