Ответ
git rebase — это команда для перезаписи истории коммитов. Она переносит цепочку коммитов из текущей ветки и применяет их поверх указанной базовой ветки, создавая линейную историю.
Основное использование:
-
Обновление feature-ветки:
# Находясь в ветке feature-branch git fetch origin # Получить свежие коммиты с удаленного репозитория git rebase origin/main # Перебазировать feature-branch на актуальный mainЭто переместит ваши коммиты на вершину
main, как если бы вы начали работу с самой последней версии. -
Интерактивное перебазирование (
-i): Позволяет редактировать историю коммитов перед их применением.git rebase -i HEAD~3 # Редактировать последние 3 коммитаОткроется редактор, где можно:
pick— оставить коммит как есть.squash— объединить коммит с предыдущим.reword— изменить сообщение коммита.edit— остановиться для внесения изменений в коммит.drop— удалить коммит.
Преимущества перед git merge:
- Чистая история: Избегает лишних merge-коммитов, история становится линейной и легко читаемой.
- Упрощает навигацию: Легче следовать за развитием фичи в
git log.
Критически важные правила:
- НИКОГДА не перебазируйте коммиты, которые уже были отправлены в общий репозиторий (push). Это перезапишет историю для других разработчиков и вызовет конфликты.
- Используйте
rebaseтолько для локальных коммитов в вашей приватной ветке.
Стандартный рабочий процесс:
git checkout -b my-feature # Создать и перейти в feature-ветку
# ... делаем коммиты ...
git fetch origin
git rebase origin/main # Обновить ветку относительно main
# Решить возможные конфликты, затем продолжить:
git rebase --continue
# Когда ветка готова, можно смержить через fast-forward:
git checkout main
git merge my-feature