Для чего используется команда `git rebase`?

«Для чего используется команда `git rebase`?» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я использую git rebase для того, чтобы поддерживать чистую, линейную историю коммитов в своей ветке разработки. Основная цель — интегрировать изменения из основной ветки (например, main или develop) в свою feature-ветку, переиграв мои коммиты поверх актуального состояния.

Типичные сценарии использования в моём workflow:

  1. Обновление feature-ветки: Вместо слияния через git merge main, я делаю git rebase main. Это перемещает все мои коммиты на вершину обновлённой main, избегая создания лишнего merge-коммита и сохраняя историю линейной.

    git checkout my-feature
    git fetch origin
    git rebase origin/main
  2. Интерактивное изменение истории (-i): Перед тем как отправить Pull/Merge Request, я часто делаю git rebase -i HEAD~5, чтобы:

    • squash — объединить несколько мелких или исправляющих коммитов в один логический.
    • reword — улучшить сообщения коммитов.
    • edit — внести мелкие правки в код старых коммитов.
    • drop — удалить ненужные или ошибочные коммиты.
  3. Перенос ветки на новую базу: Например, если я начал ветку от feature/A, а потом нужно перебазировать её на main.

Важное правило, которого я придерживаюсь: Никогда не делаю rebase для коммитов, которые уже были отправлены в общий репозиторий (т.е. после git push), если только это не согласованная операция с командой. Rebase перезаписывает историю, что сломает локальные копии у коллег. Для уже опубликованных веток безопаснее использовать git merge.