ENIGMA AI
ENIGMA AI

Чем отличается git merge от git rebase?

встречается 7× Git junior devops

Как ответить

Суть различия: git merge создаёт новый коммит слияния (merge commit), который объединяет две ветки, сохраняя полную историю. git rebase переписывает историю — переносит коммиты текущей ветки поверх целевой, делая историю линейной. Выбор зависит от того, нужна ли вам явная точка слияния и хронология или чистая линейная история.

Как работает merge: Команда git merge feature-branch (находясь в main) создаёт merge commit, у которого два родителя — последний коммит main и последний коммит feature-branch. История остаётся полной, легко понять, когда и какие ветки сливались.

git checkout main
git merge feature-branch

Как работает rebase: Команда git checkout feature-branch && git rebase main берёт коммиты из feature-branch, «отрезает» их от текущего места и прикрепляет поверх последнего коммита main. Коммиты пересоздаются с новыми хешами. После rebase вы можете сделать fast-forward merge на main.

git checkout feature-branch
git rebase main
git checkout main
git merge feature-branch  # теперь будет fast-forward

Когда что использовать:

  • Merge — публичные ветки (main, release), когда история должна быть неизменна и нужна информация, кто, когда и откуда сливал. Коммит слияния — явная отметка.
  • Rebase — личные feature-ветки перед отправкой в main. Позволяет держать историю чистой, без лишних merge-коммитов (история линейна). Никогда не делайте rebase публичных веток — вы перепишете историю, у других возникнут конфликты.

Важные детали: При rebase каждый коммит применяется заново, поэтому может возникнуть конфликт на каждом коммите. При merge конфликт решается один раз в merge commit. Rebase требует принудительного пуша (git push --force-with-lease), merge — обычного push.

Есть ещё git merge --squash, который «схлопывает» все коммиты в один, но это отдельный инструмент.

Ключевые тезисы

  • Merge создаёт merge commit с двумя родителями; rebase переписывает историю (линейная последовательность коммитов).
  • Merge сохраняет историю слияний (явные точки); rebase даёт чистую линейную историю.
  • Rebase нельзя применять на публичных ветках (main, shared branch) — нарушит работу коллег.
  • При rebase конфликты всплывают на каждом коммите; при merge — один раз в merge commit.
  • После rebase требуется push --force-with-lease; после merge — обычный push.

Что спросят дальше

  • — Что будет, если сделать git rebase на ветку, на которой есть коммиты, уже отправленные в удалённый репозиторий?
  • — Как разрешить конфликт при rebase и при merge — в чём разница в процессе?
  • — Что такое fast-forward merge и когда он происходит?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение