git merge: слияние веток
Обновлено 31 июля 2026 г.
git merge <ветка> вливает названную ветку в ту, на которой ты стоишь сейчас.
Порядок здесь важнее всего остального. Сначала перейди в ветку, куда вливаешь, и только потом назови ту, откуда берёшь. Работа на feature-x закончена и должна попасть в main - значит, стоять надо на main:
$ git switch main
Switched to branch 'main'
$ git merge feature-xДальше возможны два исхода, и git выбирает между ними сам.
Перемотка против коммита слияния
Первый исход - fast-forward, перемотка. Пока ты работал на своей ветке, в main никто ничего не коммитил. Сливать нечего: git просто передвигает указатель main вперёд, туда, где стоит feature-x.
$ git merge feature-x
Updating a01b646..e07e156
Fast-forward
notes.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 notes.txtВторой исход - обычное слияние. В main за это время появились свои коммиты, истории разошлись, и git складывает изменения с обеих сторон в отдельный коммит слияния с двумя родителями:
$ git merge feature-x
Merge made by the 'ort' strategy.
z.txt | 1 +
1 file changed, 1 insertion(+)Перед этим откроется редактор с готовым сообщением Merge branch 'feature-x'. Обычно его оставляют как есть: сохранил, вышел. Слово ort - имя алгоритма слияния, трогать его не нужно.
Флаг --no-ff запрещает перемотку и делает коммит слияния даже там, где git обошёлся бы без него. Так в истории остаётся видимый след: вот здесь была ветка, вот столько в ней коммитов. Во многих проектах это требование ко всем веткам.
$ git merge --no-ff feature-x # всегда создавать коммит слиянияКогда слияние остановилось
Если обе ветки поменяли одну и ту же строку по-разному, git останавливается и просит выбрать вариант. Это конфликт слияния, рутинная ситуация. Разобрать его можно руками, а можно отменить всё целиком:
$ git merge --abort # вернуть репозиторий в состояние до mergeКоманда работает, только пока слияние не завершено. После удачного слияния она отвечает fatal: There is no merge to abort (MERGE_HEAD missing)., и отменять надо уже сам коммит через git revert.
Частые ошибки
Слияние наоборот. git merge main, выполненное стоя на feature-x, втянет main в твою ветку, а не наоборот. Ошибка не смертельная, но main при этом не получит ничего. Проверяй строку On branch ... в git status перед каждым слиянием.
Ответ Already up to date. значит, что все коммиты названной ветки уже есть в текущей. Это не ошибка: сливать нечего.
Где это в учебнике
Глава 5. Ветки: параллельные версии проекта показывает оба исхода слияния и рисует развилку через git log --graph --oneline.
Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.