Тур по Git
Ветвление и слияние / Урок 2.5

Конфликты слияния -- Разрешение различий

Конфликт слияния возникает, когда две ветки изменяют одну и ту же часть одного и того же файла. Git не может автоматически решить, какое изменение оставить, поэтому просит вас разрешить конфликт вручную.

Когда возникают конфликты?

main:     echo "hello" > greet.txt
feature:  echo "hi" > greet.txt

Обе ветки изменили greet.txt по-разному. При слиянии Git не знает, какую версию вы хотите оставить.

Как выглядит конфликт

Git отмечает конфликтующие участки в файле:

<<<<<<< HEAD
hello
=======
hi
>>>>>>> feature
  • Над =======: версия вашей текущей ветки (HEAD/main)
  • Под =======: версия входящей ветки (feature)

Как разрешить конфликт

  1. Отредактируйте файл, выбрав нужный вариант (удалите маркеры)
  2. Добавьте разрешённый файл в индекс: git add greet.txt
  3. Завершите слияние: git commit -m "Resolve conflict"

Попробуйте!

Создайте конфликт и разрешите его:

  1. Создайте файл и сделайте коммит: echo "hello" > greet.txt, затем git add greet.txt, затем git commit -m "Add greeting"
  2. Создайте ветку: git checkout -b feature
  3. Измените файл: echo "hi there" > greet.txt, затем git add greet.txt, затем git commit -m "Change greeting on feature"
  4. Вернитесь на main: git checkout main
  5. Внесите другое изменение: echo "hey world" > greet.txt, затем git add greet.txt, затем git commit -m "Change greeting on main"
  6. Попробуйте выполнить слияние: git merge feature -- конфликт!
  7. Разрешите: echo "hello world" > greet.txt, затем git add greet.txt, затем git commit -m "Resolve merge conflict"

Советы

  • Не паникуйте -- конфликты нормальны и ожидаемы
  • Всегда запускайте git status во время конфликта, чтобы увидеть, что нужно разрешить
  • Сообщение коммита слияния должно объяснять, как вы разрешили конфликт
🎯

Цель

Создайте конфликт слияния между двумя ветками и разрешите его

Terminal
$

No commits yet. Run `git init` and create your first commit.