Короткий ответ
Ветка в Git — это независимая линия разработки: несколько разработчиков могут работать над отдельными фичами, не затрагивая основную кодовую базу. Merge объединяет истории веток, создавая merge-коммит и сохраняя полную картину. Rebase «воспроизводит» коммиты одной ветки поверх другой, переписывая их ради линейной истории.
Как это работает подробнее
Обе команды интегрируют изменения из одной ветки в другую, но дают разную форму истории коммитов.
- Работа с ветками.
git branch featureсоздаёт ветку,git checkout featureпереключается на неё, аgit merge featureвливает её в текущую. - Механика merge. Слияние создаёт новый merge-коммит, история становится нелинейной, но сохраняется полная картина того, что происходило.
- Механика rebase. Коммиты ветки «перемещаются» и накладываются поверх другой ветки: merge-коммиты не появляются, история линейна.
- Практические рекомендации. Rebase удобен для чистой линейной истории в своих feature-ветках, merge предпочтителен для общих публичных веток, где историю переписывать нельзя.
- Главное ограничение. При rebase коммиты переписываются заново, поэтому его не применяют к веткам, которые уже опубликованы и используются другими.
Пример кода
Работа с ветками, слияние и rebase
git branch feature/login # создать ветку
git checkout feature/login # переключиться на неё
git merge feature/login # влить ветку в текущую
git rebase main # переложить коммиты ветки поверх mainЧто использовать на практике
- Feature-ветки. Каждую задачу веди в отдельной ветке, чтобы изолировать изменения.
- Чистая история. В собственной ветке перед вливанием используй rebase, чтобы получить линейную историю.
- Общие ветки. Для публичных веток предпочитай merge и не переписывай опубликованную историю.
Подводные камни
- Rebase опубликованного. Переписывание коммитов, которые уже используют другие разработчики, ломает их репозитории.
- Конфликты при rebase. Конфликты могут возникать на каждом переносимом коммите, что требует аккуратного разрешения.
- Текущая ветка. Merge и rebase применяются к активной ветке — проверяй, что переключился туда, куда планировал.
Как отвечать на собеседовании
- Определи ветку как независимую линию разработки → покажи базовые команды → объясни механику merge с merge-коммитом → сравни с rebase, дающим линейную историю → назови, когда какой подход применять, и предупреди про rebase опубликованных веток.