Конфликт при слиянии веток в Git
В процессе слияния двух веток возможны конфликты,
если в каждой из веток мы изменяли один и тот же файл.
Рассмотрим ситуацию, когда в обоих
ветках master
и test
из
предыдущего урока мы изменили и сделали
коммит на один тот же файл file.txt
.
А затем применили команду слияния:
git merge test
В результате увидим ошибку:
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.
Кроме того, в изменяемом файле мы увидим маркеры конфликта:
<<<<<<< HEAD
тут будут написаны изменения ветки master
=======
тут будут написаны изменения ветки test
>>>>>>> test
В верхней части сообщения указаны изменения, сделанные в основной на данный момент ветке, в нижней части - во второй ветке, которую мы хотим слить с первой. Для разрешения конфликта нам необходимо привести содержимое файла к общему виду, предварительно удалив (руками в редакторе!) все обозначения конфликта, которые оставил в нем Git.
После того, как мы разрешим конфликт
(то есть оставим правильный код в файле),
проиндексируем наш файл и сделаем коммит
в ветке master
, в которой мы
сейчас находимся:
git add file.txt
git commit -m "слияние"
Только после этого мы можем переключиться
на вторую ветку test
и проделать
все те же операции, что и в ветке master
,
в том числе и заменить содержимое файла
file.txt
на то же, что и в первой ветке:
git add file.txt
git commit -m "слияние"
Теперь мы можем снова переключиться на основную ветку и влить в нее вторую:
git switch master
git merge test
Намеренно создайте конфликт при слиянии веток. Затем разрешите его.