Слияние веток (Merge)¶
Слияние (merge) — это процесс объединения изменений из одной ветки в другую.
Базовое слияние¶
Чтобы слить ветку feature в текущую ветку:
# Убедитесь, что вы в целевой ветке (куда сливаем)
git checkout main
# Обновите целевую ветку
git pull origin main
# Выполните слияние
git merge feature
Типы слияния¶
Fast-Forward Merge¶
Если в целевой ветке не было новых коммитов с момента создания ветки feature, Git просто перемещает указатель main вперед. История остается линейной.
A---B---C (feature)
\
D (main)
После merge:
A---B---C---D (main, feature)
Three-Way Merge (Слияние с созданием коммита слияния)¶
Если в ветке main появились новые коммиты, Git создает специальный "коммит слияния" (merge commit), который объединяет две линии истории.
A---B---C (feature)
\
D---E (main)
После merge:
A---B---C---F (main)
\ /
D---E
Где F — коммит слияния.
Чтобы принудительно создать коммит слияния даже при возможности Fast-Forward:
git merge --no-ff feature -m "Добавить фичу X"
Это полезно для сохранения истории о том, что группа коммитов принадлежала одной задаче.
Отмена слияния¶
Если слияние прошло успешно, но вы хотите его отменить:
git reset --hard HEAD~1
(Удаляет последний коммит слияния).
Если слияние еще не завершено (например, есть конфликты):
git merge --abort
Слияние нескольких коммитов в один (Squash Merge)¶
Часто удобно объединить все коммиты из фич-ветки в один чистый коммит при слиянии в main. Это делается через Pull Request на GitHub/GitLab, но можно и локально:
git merge --squash feature
git commit -m "Добавить полную функциональность X"
Все изменения из ветки feature будут добавлены в индекс, но история коммитов не будет перенесена.
Проверка перед слиянием¶
Перед слиянием полезно посмотреть, какие изменения будут внесены:
# Показать список файлов, которые изменятся
git diff --name-status main feature
# Показать полный diff
git diff main feature