Git Merge
Последнее обновление
git merge переносит коммиты из другой ветки в текущую. Когда текущая ветка не разошлась, Git выполняет fast-forward - просто перемещает указатель вперёд. Когда в обеих ветках есть новые коммиты, Git создаёт merge-коммит, связывающий две истории вместе. В отличие от rebase, merge сохраняет точную историю обеих веток.
Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.
Синтаксис
| Command | What it does |
|---|---|
git merge feature | Слить feature в текущую ветку |
git merge --no-ff feature | Всегда создавать merge-коммит |
git merge --ff-only feature | Сливать только при возможности fast-forward |
git merge --squash feature | Объединить коммиты ветки в один |
git merge --abort | Отменить слияние с конфликтами |
Fast-forward против merge-коммита
| Scenario | Fast-forward | Merge commit (--no-ff) |
|---|---|---|
| Создаёт новый коммит | Нет | Да |
| Сохраняет запись о ветке | Нет | Да |
| Происходит, когда | Текущая ветка не разошлась | В обеих ветках есть новые коммиты |
Разрешение конфликта слияния
Когда обе ветки изменили одни и те же строки, Git приостанавливается.
| Step | Command | Result |
|---|---|---|
| 1 | Отредактируйте конфликтующие файлы | Выберите правильные строки, удалите маркеры |
| 2 | git add <file> | Пометить конфликт как разрешённый |
| 3 | git commit | Завершить слияние |
Часто задаваемые вопросы о git merge
Как слить одну ветку в другую в Git?
Переключитесь на ветку, в которую хотите выполнить слияние (например,
git switch main), затем выполните git merge feature. Git объединяет коммиты из feature в main - либо с помощью fast-forward, либо создавая merge-коммит, если обе ветки разошлись.В чём разница между fast-forward и merge-коммитом?
Fast-forward происходит, когда ваша текущая ветка не двигалась с тех пор, как от неё отделилась другая ветка - Git просто сдвигает указатель вперёд, без нового коммита. Merge-коммит создаётся, когда в обеих ветках есть новые коммиты, связывая их истории. Используйте
--no-ff, чтобы всегда создавать merge-коммит, или --ff-only, чтобы требовать fast-forward.Как разрешить конфликт слияния?
Когда при слиянии возникает конфликт, Git отмечает конфликтующие участки в затронутых файлах маркерами
<<<<<<<, ======= и >>>>>>>. Отредактируйте каждый файл, чтобы оставить правильное содержимое и удалить маркеры, затем выполните git add для разрешённых файлов и git commit, чтобы завершить слияние.Как отменить или прервать слияние?
Если слияние ещё не завершено (конфликты не разрешены), выполните
git merge --abort, чтобы отменить его и восстановить состояние до слияния. Если слияние уже завершилось локально, git reset --hard ORIG_HEAD возвращает ветку на позицию до слияния (в отличие от HEAD~1, это корректно и после fast-forward - но команда отбрасывает незакоммиченную работу). Если слияние уже отправлено, используйте git revert -m 1 <merge-hash>.Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить
git merge в настоящей оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс по Git от Coddy также пошагово охватывает слияние и разрешение конфликтов.