git merge
git merge: слить (англ. merge — слияние) изменения из другой ветки в текущую ветку.
Команда git merge используется для интеграции изменений из одной ветки в другую. Цель слияния — объединить работу, выполненную в разных ветках, в одну линию разработки, обычно в основную ветку.
Слияние — частая операция в работе с Git, особенно когда новые возможности или исправления ошибок делаются в отдельных ветках. Как только работа в ветке закончена и проверена, её можно влить обратно в основную ветку (или любую другую целевую), чтобы применить эти изменения.
В Git есть два основных типа слияний:
-
Слияние fast-forward: Это слияние происходит, если целевая ветка не разошлась с исходной. В этом случае Git просто перемещает указатель целевой ветки на последний коммит исходной ветки. Новый коммит слияния не создаётся, потому что исходная ветка уже опережает целевую.
-
Коммит слияния (merge commit): Когда целевая ветка разошлась с исходной (то есть в обеих ветках появились новые коммиты), Git создаёт новый коммит, объединяющий изменения из обеих веток. Это называется коммитом слияния (merge commit), и у него два родительских коммита: один из целевой ветки и один из исходной.
Слияния fast-forward — лучший вариант, чтобы история коммитов оставалась чистой и линейной. Интересно, что часто этого добиваются не через git merge, а с помощью команды git rebase. Вместо того чтобы создавать «салат из коммитов», где коммиты из твоей ветки перемешаны с коммитами из другой, rebase берёт все коммиты из другой ветки и применяет все твои коммиты поверх них, создавая линейную историю.
Иногда слияние может привести к конфликту слияния (merge conflict), если одни и те же строки кода были изменены в обеих ветках. В таких случаях Git отметит конфликтующие строки в затронутых файлах, и тебе придётся разрешить конфликты вручную — отредактировать файлы и выбрать, какие изменения оставить.
Помни: перед слиянием часто бывает полезно убедиться, что текущая ветка синхронизирована с последними изменениями из удалённого репозитория. Для этого можно выполнить git fetch, а затем git merge или git rebase с удалённой веткой. Это помогает избежать конфликтов и сохранить историю более чистой.
Примеры
Слить ветку new-feature в текущую:
git merge new-featureСлить ветку login-form-bugfix в текущую и создать коммит слияния, даже если возможно слияние fast-forward:
git merge --no-ff login-form-bugfixОтменить слияние при возникновении конфликтов:
git merge --abortПосле разрешения конфликтов завершить слияние:
git add .git merge --continue
.gitignoregit checkoutgit configgit taggit worktree