Конфлікт виникає, коли обидві гілки змінили ті самі рядки (або одна змінила файл, а інша - видалила). Git не знає, яка версія правильна, і зупиняє злиття.
git merge feature
# CONFLICT (content): Merge conflict in app/Services/Billing.php
git status # список файлів з конфліктами
У файлі з'являються маркери:
<<<<<<< HEAD
$total = $subtotal * 1.2;
=======
$total = $subtotal + $this->tax($subtotal);
>>>>>>> feature
Що робити:
- Відредагувати файл: залишити потрібну версію, поєднати обидві чи написати третю. Прибрати всі маркери.
- Перевірити, що код працює: тести, запуск.
- Позначити конфлікт розв'язаним і завершити:
git add app/Services/Billing.php
git commit # для rebase: git rebase --continue
Передумали - повернути все як до злиття: git merge --abort (чи git rebase --abort).
Корисне:
git config --global merge.conflictStyle zdiff3- маркери показують ще й спільного предка: видно не лише «що в кожній гілці», а й «що було до обох змін». Розв'язувати значно легше.- IDE (PhpStorm, VS Code) мають тристоронній редактор конфліктів.
- Для файлів, які генеруються (
composer.lock,package-lock.json), руками не мержать: беруть одну версію й заново виконують команду, що її створила.
Як конфліктів менше: короткоживучі гілки, часта інтеграція з main, невеликі pull request.
Докладніше в документації: git merge: розв'язання конфліктів