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), между ======= и >>>>>>> — другая. Чтобы разрешить: выберите один вариант, смешайте оба или перепишите, затем удалите все маркеры.
Решения
git statusпоказывает файлы с «both modified».- Откройте файл (VS Code показывает кнопки Accept Current/Incoming Change).
- Разрешите конфликт, удалите маркеры
<<<<<<<,=======,>>>>>>>. git add файлgit commit(для слияния) илиgit rebase --continue(для rebase).- Отмена:
git merge --abortилиgit rebase --abortвозвращает прежнее состояние. Сgit mergetoolоткрывается графический инструмент.
Предотвращение
- Часто синхронизируйтесь с основной веткой (
git pull,git merge main), чтобы различия оставались небольшими. - Небольшие, недолгие ветки и небольшие коммиты.
- Договоритесь в команде, кто работает над какими файлами.
- Используйте форматировщики последовательно, чтобы не возникало конфликтов из-за пробелов.
- Тестируйте после разрешения: конфликт может привести к логически неверному, но синтаксически допустимому коду.
Для двоичных файлов или lock-файлов (
package-lock.json) часто помогает: выбрать одну сторону и сгенерировать заново.
См. также: Git: not a git repository