Ответ
git rebase -i (интерактивный rebase). Это мощнейший инструмент для поддержания чистой и логичной истории коммитов перед тем, как влить свою работу в общую ветку (например, main или develop).
Зачем это нужно? В процессе активной разработки в feature-ветке часто накапливаются коммиты типа "исправление опечатки", "wip" или "добавил забытый файл". git rebase -i позволяет "причесать" эту историю.
Типичный сценарий использования:
# Находясь в своей feature-ветке, перебазируем ее на актуальную main
# и редактируем последние 4 коммита.
git fetch origin
git rebase -i origin/main~4
В открывшемся редакторе можно:
- Объединить коммиты (
squashилиfixup): Слить несколько мелких коммитов в один осмысленный. - Переписать сообщения (
reword): Исправить опечатки или сделать сообщения более информативными. - Изменить порядок (
pickи перемещение строк): Выстроить коммиты в логической последовательности. - Редактировать код в старом коммите (
edit): Исправить забытую ошибку прямо в истории.
Пример итоговой истории ДО и ПОСЛЕ:
# ДО rebase -i:
* add user controller (HEAD)
* fix typo in route
* implement user service
* wip: user model
* merge main into feature
# ПОСЛЕ rebase -i (squash, reword):
* feat: implement user domain model and service (HEAD)
* feat: add user REST controller with CRUD operations
Важное правило: Интерактивный rebase следует применять только к коммитам, которые еще не были отправлены в общий удаленный репозиторий (или в ветку, где вы работаете в одиночку). Для уже опубликованной истории используйте git merge или git revert, чтобы не создавать проблем коллегам.