Что такое interactive rebase?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое 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
Он требует понимания и осторожности, но значительно улучшает качество истории проекта.