Ответ
git rebase — это команда Git для перемещения (перебазирования) цепочки коммитов одной ветки на вершину другой ветки. В отличие от merge, который создает коммит слияния, rebase «переписывает» историю, линейно применяя коммиты поверх новой базы.
Как это работает (базовый сценарий):
- Вы находитесь в ветке
feature. - Выполняете
git rebase main. - Git временно сохраняет ваши коммиты из
feature. - Перемещает указатель
featureна текущую вершинуmain. - Последовательно применяет сохраненные коммиты поверх
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, чтобы не переписывать общую историю.