Как команда git rebase изменяет историю коммитов?

Ответ

git rebase — это процесс переноса или объединения последовательности коммитов на новую базовую фиксацию. В отличие от git merge, который создает коммит слияния, rebase перезаписывает историю проекта, создавая новые коммиты для каждого коммита в исходной ветке.

Это делает историю коммитов более линейной и чистой, но является деструктивной операцией, так как изменяет хеши коммитов.

Основной сценарий использования:

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

# Переключаемся на вашу ветку
git checkout feature

# Переносим коммиты из feature поверх последнего коммита main
git rebase main

Результат: Коммиты из feature будут применены поверх актуального состояния main, как если бы вы начали свою работу только что. Старые коммиты удаляются, а вместо них создаются новые с тем же содержимым, но новыми хешами и родительскими коммитами.

Ключевые правила:

  • Не используйте rebase для публичных веток (например, main или develop), на которые опираются другие разработчики. Перезапись общей истории вызовет серьезные проблемы при синхронизации.
  • Используйте rebase для "подтягивания" изменений в свои локальные feature-ветки перед их слиянием в основную ветку.
  • Будьте готовы разрешать конфликты для каждого переносимого коммита по отдельности.