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 и проверка шагов.