← Назад к вопросам

Что такое interactive rebase?

1.7 Middle🔥 11 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое interactive rebase?

Interactive rebase (интерактивный rebase) — это мощный инструмент в Git, который позволяет переписать историю коммитов перед слиянием в основную ветку. Это редактирование истории, где вы можете переорганизовать, переименовать, объединить, разделить или удалить коммиты.

Основное назначение

Interactive rebase используется для:

  • Очистки истории перед pull request
  • Объединения коммитов (squashing)
  • Переименования сообщений коммитов
  • Переупорядочивания коммитов
  • Удаления ненужных коммитов
  • Разделения больших коммитов

Как запустить

git rebase -i HEAD~3
git rebase -i origin/main
git rebase -i abc1234

Интерактивное меню

Когда вы запускаете интерактивный rebase, открывается текстовый редактор со списком коммитов:

pick 1f4e3c2 Добавил функцию login
pick 8a2b5f1 Исправил баг в валидации
pick 3c7e9d4 Добавил тесты

p, pick = используй этот коммит
r, reword = используй, но отредактируй сообщение
e, edit = используй, но остановись перед коммитом
s, squash = используй, но объедини с предыдущим
f, fixup = как squash, но выброси сообщение коммита
d, drop = удали коммит

Практические примеры

1. Объединение коммитов (squashing)

git rebase -i HEAD~3

Отредактируй:

pick 1f4e3c2 Добавил функцию login
squash 8a2b5f1 Исправил баг в валидации
squash 3c7e9d4 Добавил тесты

Результат: три коммита объединятся в один с объединённым сообщением.

2. Переименование сообщения коммита

git rebase -i HEAD~2
reword 1f4e3c2 Добавил функцию login
pick 8a2b5f1 Исправил баг

После этого Git остановится и предложит отредактировать сообщение первого коммита.

3. Переупорядочивание коммитов

Просто измени порядок строк:

pick 8a2b5f1 Исправил баг
pick 1f4e3c2 Добавил функцию login
pick 3c7e9d4 Добавил тесты

4. Редактирование коммита

git rebase -i HEAD~2
edit 1f4e3c2 Добавил функцию login
pick 8a2b5f1 Исправил баг

Git остановится. Вы можете изменить файлы и продолжить:

git add файлы
git rebase --continue

Важные правила

Золотое правило: не переписывай историю коммитов, которые уже push'нуты в удалённый репозиторий и используются другими разработчиками. Если всё же нужно:

git push -f origin branch-name

Обработка конфликтов при rebase:

git add .
git rebase --continue
git rebase --abort

Типичный workflow

git checkout -b feature/auth
echo 'много коммитов'
git rebase -i origin/main

Перейди:

  • Объедини связанные коммиты
  • Удали debug коммиты
  • Переименуй непонятные сообщения
git push origin feature/auth

Альтернатива: autosquash

git commit --fixup abc1234
git commit --squash abc1234
git rebase -i --autosquash origin/main

Git автоматически переместит эти коммиты в правильное место.

Заключение

Interactive rebase — это:

  • Инструмент для локальной разработки
  • Способ создать чистую, понятную историю коммитов
  • Инструмент для профессионального git workflow

Он требует понимания и осторожности, но значительно улучшает качество истории проекта.