#Что означает ошибка
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. |
| Устаревшая веткаВетка давно не обновлялась. | Много конфликтов при слиянии. | Чаще обновляйте из основной. |
#Пошаговое решение
- Посмотрите состояниеВ терминале редактора VS Code («Терминал» → «Создать терминал») перейдите в папку Git-проекта и выполните
git status. Найдите разделUnmerged pathsи список конфликтных файлов. До исправлений сохраните незакоммиченные важные изменения отдельно: конфликт может быть результатомmerge,rebaseилиcherry-pick, и способ завершения у них различается. Командаgit diff --name-only --diff-filter=Uпокажет лишь ещё не разрешённые файлы. - Откройте конфликтный файлВ VS Code откройте нужный конфликтный файл из раздела «Контроль версий» (Ctrl+Shift+G) или из Проводника проекта. При текстовом конфликте найдите
<<<<<<<,=======,>>>>>>>: между первыми двумя маркерами находится один вариант, далее — другой. Иногда Git редактор показывает отдельное окно сравнения вместо маркеров. Не удаляйте всё содержимое между маркерами, пока не разберётесь, какие изменения нужны программе. - Выберите вариантДля каждого конфликтного участка сравните оба изменения, историю задачи и соседний код, выберите нужную логику или объедините части в правильном порядке. После редактирования удалите служебные строки-маркеры
<<<<<<<,=======,>>>>>>>, сохраните файл и проверьте синтаксис или тесты. Если конфликт касается конфигурации, убедитесь, что сохраняются нужные параметры обеих веток, а не только удобный фрагмент. - Используйте инструментВстроенный редактор слияния VS Code иногда предлагает «Принять текущее», «Принять входящее», «Принять оба» (названия зависят от версии), но сначала внимательно прочитайте обе стороны. Альтернатива —
git mergetool, если инструмент настроен заранее. Эти варианты взаимоисключающие; не запускайте разные автоматические средства последовательно без понимания, что они уже переписали в файле. - Отметьте как решённыйПосле того как конкретный файл исправлен и сохранён, из корня проекта выполните
git add -- "путь/к/файлу", подставив путь изgit status. Повторите для каждого конфликтного файла, затемgit status: разделUnmerged pathsдолжен исчезнуть. Командаgit addотмечает исправление, но не подтверждает корректность кода; перед завершением запустите тесты проекта. - Завершите слияниеЕсли выполнялось обычное слияние
git merge, после разрешения всех конфликтов запуститеgit merge --continue(илиgit commit, если Git просит завершить коммит). Если этоgit rebase, используйтеgit rebase --continue, а дляcherry-pick—git cherry-pick --continue. Проверьте подсказкуgit status, прежде чем выбирать команду, и внимательно прочитайте сообщение будущего коммита. - Если запутались — отменитеЕсли вы не понимаете, как объединить изменения, сначала сохраните копии важных незакоммиченных файлов. Для отмены именно слияния
git merge --abort; для перебазированияgit rebase --abort; для выбора коммитаgit cherry-pick --abort. Отмена может затронуть незакоммиченные изменения, поэтому не запускайте её наугад. После отмены проверьтеgit statusи уточните у автора второй ветки спорные участки. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
- Проверьте результатВ корне проекта выполните штатные команды проверки из
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, который запоминает ваши решения. Справка — .