Разница rebase и merge

Разница между git merge и git rebase заключается в том, как они объединяют изменения из одной ветки в другую и как это отражается на истории коммитов.


1. Merge

  • Что делает: Объединяет изменения двух веток, создавая новый коммит слияния.

  • История: Сохраняет все ветки и коммиты, история может быть разветвлённой.

  • Плюсы:

    • Сохраняется полный контекст работы веток.

    • Безопасно для публичных веток.

  • Минусы:

    • История может быть «засорённой» множеством merge-коммитов.

Пример:

main:     A --- B
feature:      C --- D
merge:   A --- B --- M
                \ C --- D
  • M — merge-коммит.

Команда:

git checkout main
git merge feature

2. Rebase

  • Что делает: Переносит коммиты одной ветки на вершину другой ветки, переписывая историю.

  • История: Линейная, без merge-коммитов.

  • Плюсы:

    • Чистая, линейная история.

    • Удобно для подготовки ветки перед объединением с основной.

  • Минусы:

    • Переписывает историю, небезопасно на публичных ветках, которыми пользуются другие.

Пример:

main:     A --- B
feature:      C --- D
rebase:   A --- B --- C' --- D'
  • C' и D' — новые коммиты с теми же изменениями.

Команда:

git checkout feature
git rebase main

Ключевое различие

  • Merge: сохраняет историю ветвления, добавляет merge-коммит.

  • Rebase: «переписывает» коммиты так, как будто они были созданы на основе целевой ветки, история становится линейной.

Last updated

Was this helpful?