Ответ
Merge-конфликт возникает, когда Git не может автоматически объединить изменения из разных веток в одном файле. Вот мой алгоритм решения:
-
Идентифицирую конфликтующие файлы. Git выведет сообщение
Automatic merge failed; fix conflicts and then commit the result.. Командаgit statusпокажет файлы в состоянииboth modified. -
Открываю каждый такой файл. Конфликтующие блоки помечены специальными маркерами:
<<<<<<< HEAD Код из текущей ветки (например, main или feature-branch) ======= Код из ветки, которую пытаюсь смержить (например, origin/main) >>>>>>> branch-name -
Вручную редактирую файл, чтобы получить итоговую корректную версию. Удаляю маркеры
<<<<<<<,=======,>>>>>>>и оставляю нужные строки кода, возможно, комбинируя изменения. -
После разрешения всех конфликтов добавляю исправленные файлы и создаю коммит слияния:
git add <имя_файла_с_конфликтом> # или просто git add . git commit -m "Merge branch 'feature-x' and resolve conflicts"
Полезные инструменты:
git mergetool— запускает визуальный инструмент (например,meld,vimdiff,kdiff3), который удобнее для сложных конфликтов.git diff— чтобы увидеть различия между конфликтующими версиями.- Стратегия предотвращения: Часто делаю
git pull --rebase(илиgit rebase mainв feature-ветке), чтобы переносить свои коммиты на актуальную основу, минимизируя конфликты в будущем мерже.