Ответ
Самое важное правило: никогда не делайте интерактивный rebase для коммитов, которые уже были отправлены в общий репозиторий (push). Это перезаписывает историю и вызывает конфликты у всех, кто уже склонировал эти изменения.
Интерактивный rebase (git rebase -i) — это мощный инструмент для локальной очистки истории перед тем, как поделиться работой.
Основное применение и команды:
# Перебазировать последние 4 коммита текущей ветки
git rebase -i HEAD~4
В открывшемся редакторе вы можете:
pick— оставить коммит как есть.reword— изменить сообщение коммита.edit— остановиться для внесения изменений в сам коммит.squashилиfixup— объединить коммит с предыдущим (fixupотбрасывает его сообщение).drop— удалить коммит.
Пример сценария (объединение коммитов):
# Исходная история: 4 коммита с мелкими правками
pick a1b2c3 Добавил новую функцию
pick d4e5f6 Исправил опечатку в комментарии
pick g6h7i8 Добавил недостающую проверку
pick j8k9l0 Обновил документацию
# После редактирования (объединяем правки в один логический коммит):
pick a1b2c3 Добавил новую функцию
fixup d4e5f6 Исправил опечатку в комментарии
fixup g6h7i8 Добавил недостающую проверку
pick j8k9l0 Обновил документацию
# Результат: 2 коммита — один с функцией и правками, второй с документацией.
Практический совет: Я использую интерактивный rebase в своей feature-ветке перед созданием пул-реквеста, чтобы создать чистую, логичную историю, которую легко ревьюить и мержить.