Глиф Учебники

Как решить конфликт в Git

Справочник · Git · 1 минута чтения

В файлах с конфликтом Git записал оба варианта и окружил их метками:

Текст
<<<<<<< HEAD
ваш вариант (текущая ветка)
=======
вариант другой ветки
>>>>>>> feature

Порядок действий:

  1. Посмотрите, в каких файлах конфликт: git status, раздел Unmerged paths, пометка both modified.
  2. Откройте каждый такой файл и найдите метки <<<<<<<, =======, >>>>>>>.
  3. Оставьте нужный текст — один вариант, оба или новый — и удалите все три строки-метки.
  4. Сохраните файл и отметьте конфликт решённым: git add файл.
  5. Когда решены все файлы, завершите операцию — как, зависит от команды, на которой случился конфликт.
Конфликт возник приКак завершитьКак отменить всё
git merge или git pullgit commitgit merge --abort
git rebasegit rebase --continuegit rebase --abort
git stash popничего не нужно, но отложенное осталось в списке — удалите его git stash dropgit reset --merge

Готовое сообщение коммита слияния откроется в редакторе — сохраните и закройте его. После git pull не забудьте git push.

Проверьте, что меток не осталось: git diff --check до git add и git diff --staged --check после него выводят строки с забытыми метками. Коммит с <<<<<<< в коде — сломанная программа в истории.

Взять файл целиком с одной стороны

Выполните одну из первых двух команд — какую сторону оставить, — затем git add:

Bash
git checkout --ours config.json
git checkout --theirs config.json
git add config.json

--ours — версия текущей ветки, --theirs — сливаемой. При rebase наоборот: --ours — ветка, на которую переносите, --theirs — ваши коммиты. Это удобно для файлов, которые не правят руками: например, двоичных или созданных программой.

В редакторе

Visual Studio Code и другие редакторы кода подсвечивают конфликт и дают кнопки «Accept Current Change», «Accept Incoming Change», «Accept Both Changes». Кнопка лишь правит файл — git add и завершение операции всё равно за вами.

Подводные камни

Подробно, с примером и разбором меток, — в уроке Конфликты слияния.