Слияние (merge)
Что такое git merge?
git merge
– это команда в Git, которая используется для объединения изменений из одной ветки в другую. Основная цель git merge
– интеграция изменений, сделанных в другой ветке, в текущую ветку, обеспечивая сохранение полной истории изменений и разрешение конфликтов, если они возникают.
Основные характеристики
- Объединение изменений:
git merge
позволяет объединить изменения из другой ветки в текущую ветку. - Сохранение истории: В отличие от
rebase
,merge
сохраняет историю коммитов в том виде, в каком они были изначально. - Создание коммита слияния: При выполнении слияния создаётся новый коммит слияния, если слияние не является fast-forward.
Типы слияний
-
Fast-forward: Если текущая ветка не содержит коммитов, созданных после последнего общего коммита с веткой, которую вы хотите слить, Git просто перемещает указатель текущей ветки вперед. В этом случае новый коммит слияния не создаётся.
git merge <ветка>
-
Recursive merge: Если обе ветки содержат уникальные коммиты после последнего общего коммита, создаётся новый коммит слияния. Это поведение по умолчанию для большинства слияний.
git merge <ветка>
Синтаксис
git merge <ветка>
<ветка>
– имя ветки, изменения из которой вы хотите объединить в текущую ветку.
Пример использования
- Обычное слияние:
Эта команда объединяет изменения из ветки
git checkout main git merge feature-branch
feature-branch
в веткуmain
.
Полезные флаги и опции
-
--no-ff
: Отключает fast-forward слияние и всегда создаёт новый коммит слияния.git merge --no-ff feature-branch
-
--squash
: Объединяет изменения из ветки в рабочую директорию, но не создаёт коммит слияния. После этого вам нужно вручную закоммитить изменения.git merge --squash feature-branch
-
--no-commit
: Выполняет слияние, но не делает коммит автоматически. Это позволяет вам сделать дополнительные изменения перед созданием коммита.git merge --no-commit feature-branch
-
--abort
: Прерывает слияние и возвращает репозиторий в состояние до начала слияния.git merge --abort
Пример работы с конфликтами
-
Выполните
git merge
:git merge feature-branch
-
Если возникли конфликты, Git уведомит вас об этом. Разрешите конфликты, отредактировав соответствующие файлы.
-
После разрешения конфликтов добавьте изменённые файлы:
git add <файл-с-конфликтом>
-
Завершите процесс слияния:
git commit
Примечание
Использование git merge
может привести к конфликтам, если изменения в целевой ветке пересекаются с вашими локальными изменениями. В этом случае вам придётся разрешить конфликты вручную.