Как разрешать конфликты в git
Когда возникает конфликт git
сообщает нам об этом в выводе в терминал. Конфликты могут возникать при выполнении rebase, megre, revert и т.п. Рассмотрим всё на примере команды git merge
, когда мы вливаем какую-то ветку в main. В выводе git status
файлы, в которых возникли конфликты, помечаются как both modified
.
$ git status
On branch main
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file_with_conflict.md
Если мы посмотрим внутрь файла, то увидим:
$ cat file_with_conflict.md
<<<<<<< HEAD
some content
=======
new content to merge
>>>>>>> new_branch_to_merge
Тут мы видим разделители:
- <<<<<<< HEAD
- =======
- >>>>>>> new_branch_to_merge
Всё что до =======
это изменения в текущей ветке, а всё что после это входящие изменения (которые мы попытались влить из другой ветки). Соответственно, нам нужно оставить либо одно, либо другое. Это и называют "разрулить конфликт". Давайте оставим только новые изменения. Вот как будет выгядеть файл:
$ cat file_with_conflict.md
new content to merge
После этого файл нужно проиндексировать с помощью git add
и выполнить коммит. Таким образом зафиксировав в истории новые изменения.