Что делает команда `git rebase` и когда её следует использовать?

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

Ответ

git rebase перемещает (перебазирует) всю историю коммитов одной ветки на вершину другой ветки, создавая линейную историю.

Основное использование:

git checkout feature-branch
git rebase main
# Теперь коммиты из feature-branch применяются поверх актуального main

Зачем это нужно?

  • Чистая история: Избегает лишних merge-коммитов, сохраняя историю линейной и легко читаемой.
  • Интеграция изменений: Позволяет проверить, что ваша ветка корректно работает с последними изменениями в базовой ветке (например, main или develop).

Ключевые особенности и риски:

  • Перезапись истории: Изменяет хэши коммитов. Нельзя использовать для коммитов, уже отправленных в общий репозиторий, если с ними работали другие разработчики.
  • Интерактивный режим (-i): Позволяет редактировать, объединять (squash), удалять или менять порядок коммитов перед применением.
  • Разрешение конфликтов: Конфликты могут возникать для каждого перебазируемого коммита, что требует их последовательного разрешения.

Сравнение с git merge:

  • rebase: «Переписывает» историю, перемещая ваши коммиты. Используется для подготовки ветки к слиянию.
  • merge: Сохраняет полную историю, создавая новый коммит слияния. Безопаснее для публичных веток.