Ответ
Команда git merge
используется для интеграции изменений из одной ветки в другую. Она объединяет независимые линии разработки в единую историю коммитов.
Процесс слияния:
- Git находит общего предка для двух веток (текущей и той, которую сливают).
- Git пытается объединить изменения, сделанные в обеих ветках с момента их расхождения.
- В случае успеха создается новый коммит слияния (
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
сохраняет полную и точную историю коммитов обеих веток, создавая нелинейную, но более явную историю разработки.