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