EMZETT.
Войти

Git: разрешение конфликта слияния

Коротко: Конфликт слияния возникает, когда два изменения затрагивают одно место; Git помечает его, а вы решаете, какая версия действует.

Подробнее: Сообщение: CONFLICT (content): Merge conflict in file.txt и Automatic merge failed; fix conflicts and then commit the result. Git может автоматически объединить два изменения, пока они затрагивают разные места. Если оба касаются одних и тех же строк, решать должен человек.

Подробности

Как выглядит конфликт

<<<<<<< HEAD
Display in blue
=======
Display in green
>>>>>>> feature/colour

Между <<<<<<< и ======= находится ваша версия (HEAD), между ======= и >>>>>>> — другая. Чтобы разрешить: выберите один вариант, смешайте оба или перепишите, затем удалите все маркеры.

Решения

  1. git status показывает файлы с «both modified».
  2. Откройте файл (VS Code показывает кнопки Accept Current/Incoming Change).
  3. Разрешите конфликт, удалите маркеры <<<<<<<, =======, >>>>>>>.
  4. git add файл
  5. git commit (для слияния) или git rebase --continue (для rebase).
  6. Отмена: git merge --abort или git rebase --abort возвращает прежнее состояние. С git mergetool открывается графический инструмент.

Предотвращение

  • Часто синхронизируйтесь с основной веткой (git pull, git merge main), чтобы различия оставались небольшими.
  • Небольшие, недолгие ветки и небольшие коммиты.
  • Договоритесь в команде, кто работает над какими файлами.
  • Используйте форматировщики последовательно, чтобы не возникало конфликтов из-за пробелов.
  • Тестируйте после разрешения: конфликт может привести к логически неверному, но синтаксически допустимому коду. Для двоичных файлов или lock-файлов (package-lock.json) часто помогает: выбрать одну сторону и сгенерировать заново.

См. также: Git: not a git repository