Конфликты слияния -- Разрешение различий
Конфликт слияния возникает, когда две ветки изменяют одну и ту же часть одного и того же файла. Git не может автоматически решить, какое изменение оставить, поэтому просит вас разрешить конфликт вручную.
Когда возникают конфликты?
main: echo "hello" > greet.txt
feature: echo "hi" > greet.txt
Обе ветки изменили greet.txt по-разному. При слиянии Git не знает, какую версию вы хотите оставить.
Как выглядит конфликт
Git отмечает конфликтующие участки в файле:
<<<<<<< HEAD
hello
=======
hi
>>>>>>> feature
- Над
=======: версия вашей текущей ветки (HEAD/main) - Под
=======: версия входящей ветки (feature)
Как разрешить конфликт
- Отредактируйте файл, выбрав нужный вариант (удалите маркеры)
- Добавьте разрешённый файл в индекс:
git add greet.txt - Завершите слияние:
git commit -m "Resolve conflict"
Попробуйте!
Создайте конфликт и разрешите его:
- Создайте файл и сделайте коммит:
echo "hello" > greet.txt, затемgit add greet.txt, затемgit commit -m "Add greeting" - Создайте ветку:
git checkout -b feature - Измените файл:
echo "hi there" > greet.txt, затемgit add greet.txt, затемgit commit -m "Change greeting on feature" - Вернитесь на main:
git checkout main - Внесите другое изменение:
echo "hey world" > greet.txt, затемgit add greet.txt, затемgit commit -m "Change greeting on main" - Попробуйте выполнить слияние:
git merge feature-- конфликт! - Разрешите:
echo "hello world" > greet.txt, затемgit add greet.txt, затемgit commit -m "Resolve merge conflict"
Советы
- Не паникуйте -- конфликты нормальны и ожидаемы
- Всегда запускайте
git statusво время конфликта, чтобы увидеть, что нужно разрешить - Сообщение коммита слияния должно объяснять, как вы разрешили конфликт