Как работает команда git merge и какие стратегии слияния существуют

Ответ

Команда git merge используется для интеграции изменений из одной ветки в другую. Она объединяет независимые линии разработки в единую историю коммитов.

Процесс слияния:

  1. Git находит общего предка для двух веток (текущей и той, которую сливают).
  2. Git пытается объединить изменения, сделанные в обеих ветках с момента их расхождения.
  3. В случае успеха создается новый коммит слияния (merge commit), у которого есть два родительских коммита — по одному от каждой ветки.

Основные стратегии слияния:

  • Fast-forward (перемотка) Происходит, если в целевой ветке не было новых коммитов с момента создания сливаемой ветки. Git просто перемещает указатель целевой ветки на последний коммит сливаемой ветки. Новый коммит слияния не создается, история остается линейной.

  • Recursive (рекурсивное слияние) Это стратегия по умолчанию, когда истории веток разошлись (3-way merge). Git находит общего предка, вычисляет изменения в каждой ветке и создает новый коммит слияния, чтобы объединить их. Если Git не может автоматически разрешить одинаковые изменения в одном и том же месте файла, возникает конфликт слияния, который нужно разрешить вручную.

Пример рабочего процесса:

# 1. Переключаемся на основную ветку
git checkout main

# 2. Получаем последние изменения из удаленного репозитория
git pull origin main

# 3. Выполняем слияние ветки feature-branch в main
git merge feature-branch

# 4. Если возникли конфликты, решаем их и делаем коммит
# git add <conflicted_file>
# git commit

# 5. Отправляем результат слияния на удаленный сервер
git push origin main

В отличие от git rebase, git merge сохраняет полную и точную историю коммитов обеих веток, создавая нелинейную, но более явную историю разработки.