Слияние
Оригинальное название: merge
Коротко
Операция Git, которая объединяет изменения двух веток в одну: команда git merge переносит работу из ветки задачи в основную или наоборот.
Что такое «Слияние»
Ветки нужны, чтобы работать отдельно, слияние — чтобы потом собрать результат вместе. Git находит общего предка двух веток, сравнивает, что изменилось в каждой с того момента, и складывает правки. Если они касаются разных файлов или разных мест одного файла, всё происходит автоматически.
Перемотка и коммит слияния
Если в целевой ветке с момента ответвления ничего не появилось, Git просто передвигает её указатель вперёд — это перемотка (fast-forward), новых коммитов не создаётся. Если обе ветки развивались, получается трёхстороннее слияние с отдельным коммитом, у которого два родителя. Ключ --no-ff заставляет создавать коммит слияния всегда: так в истории остаётся видно, какие коммиты пришли из одной задачи.
git switch main
git pull
git merge --no-ff feature/catalog-grid
git push
Что делать при конфликте
Когда обе ветки изменили одни и те же строки, Git останавливается и размечает спорное место в файле:
<<<<<<< HEAD
$per_page = 24;
=======
$per_page = 36;
>>>>>>> feature/catalog-grid
Верхняя часть — версия текущей ветки, нижняя — входящая. Нужно оставить правильный вариант (или их сочетание), удалить маркеры, затем выполнить git add для файла и git commit. Если запутались, git merge --abort вернёт всё к состоянию до слияния. Опасная ошибка — закоммитить файл с оставшимися маркерами: PHP-сайт после выкладки упадёт с синтаксической ошибкой.
Слияние или rebase
Rebase переносит коммиты ветки поверх свежей целевой, будто работа начиналась с неё. История получается прямой, но коммиты пересоздаются с новыми хешами, поэтому для уже опубликованных общих веток rebase не подходит. Слияние ничего не переписывает и безопасно всегда, ценой коммитов слияния в журнале. Третий вариант — squash, когда вся ветка входит в основную одним коммитом.

