Menu
Coddy logo textTech

Git Merge

Последнее обновление

git merge переносит коммиты из другой ветки в текущую. Когда текущая ветка не разошлась, Git выполняет fast-forward - просто перемещает указатель вперёд. Когда в обеих ветках есть новые коммиты, Git создаёт merge-коммит, связывающий две истории вместе. В отличие от rebase, merge сохраняет точную историю обеих веток.

Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.

Синтаксис

CommandWhat 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-коммита

ScenarioFast-forwardMerge commit (--no-ff)
Создаёт новый коммитНетДа
Сохраняет запись о веткеНетДа
Происходит, когдаТекущая ветка не разошласьВ обеих ветках есть новые коммиты

Разрешение конфликта слияния

Когда обе ветки изменили одни и те же строки, Git приостанавливается.

StepCommandResult
1Отредактируйте конфликтующие файлыВыберите правильные строки, удалите маркеры
2git add <file>Пометить конфликт как разрешённый
3git 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 также пошагово охватывает слияние и разрешение конфликтов.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ