Что такое git rebase?

«Что такое git rebase?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

git rebase — это команда Git для перемещения (перебазирования) цепочки коммитов одной ветки на вершину другой ветки. В отличие от merge, который создает коммит слияния, rebase «переписывает» историю, линейно применяя коммиты поверх новой базы.

Как это работает (базовый сценарий):

  1. Вы находитесь в ветке feature.
  2. Выполняете git rebase main.
  3. Git временно сохраняет ваши коммиты из feature.
  4. Перемещает указатель feature на текущую вершину main.
  5. Последовательно применяет сохраненные коммиты поверх main.

Визуализация:

До rebase:          После `git checkout feature; git rebase main`:
A---B---C (main)    A---B---C (main)
                            
          D---E (feature)     D'---E' (feature)

Коммиты D' и E' — это новые коммиты с теми же изменениями, но другим родителем (теперь это C).

Преимущества:

  • Чистая история: Получается линейная история без лишних коммитов слияния (Merge branch 'main' into feature), что упрощает анализ git log.
  • Упрощение сложных слияний: Линейное применение изменений часто решает конфликты последовательно и понятнее.

Риски и правила:

  • Перезапись истории: Изменяются хэши коммитов. Никогда не делайте rebase коммитов, которые уже были отправлены в общий репозиторий, если только вы не договорились с командой и не force-push.
  • Интерактивный rebase: Мощный инструмент для редактирования истории (git rebase -i). Позволяет объединять, переименовывать, удалять коммиты перед их применением.

Практическое правило: Используйте rebase для локальной очистки истории своей ветки перед слиянием в main. Для интеграции изменений из main в свою ветку предпочтительнее git merge main, чтобы не переписывать общую историю.