Перейти к содержанию

Слияние веток (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

Назад: Управление ветками → | Далее: Конфликты слияния →