Что делает `git rebase -i` и когда он используется?

git rebase -i (интерактивный rebase) позволяет переписать историю коммитов в текущей ветке. Вы запускаете интерактивный редактор, где можете:
  • Переупорядочить коммиты.
  • Объединить несколько коммитов в один (squash/fixup).
  • Удалить коммиты.
  • Редактировать сообщения коммитов.
  • Разделить один коммит на несколько.
  • Остановить rebase для внесения изменений в конкретном коммите (edit).
Он используется для:
  • Очистки истории коммитов перед слиянием в основную ветку (например, main).
  • Исправления ошибок, допущенных в предыдущих коммитах.
  • Улучшения читаемости истории проекта.
Важно: Не используйте git rebase на публичных ветках, чтобы не сломать историю у других разработчиков.

git rebase -i (interactive rebase) - это мощная команда Git, позволяющая переписать историю коммитов в текущей ветке. Она запускает интерактивный режим, в котором вы можете редактировать, объединять, переупорядочивать, удалять или даже изменять сообщения коммитов. Фактически, это инструмент для "полировки" истории ветки перед ее слиянием в основную ветку (например, main или develop).

Что происходит при запуске git rebase -i:

  1. Git открывает текстовый редактор (обычно тот, что настроен в Git) с перечнем коммитов, которые будут затронуты. Эти коммиты отображаются в порядке, в котором они будут применены при перебазировании (самый старый коммит сверху).
  2. Каждая строка в редакторе представляет один коммит и начинается с команды (например, pick, reword, edit, squash, fixup, drop).
  3. Вы редактируете этот список, изменяя команды и порядок коммитов, чтобы добиться желаемой истории.
  4. После сохранения и закрытия редактора, Git начинает процесс перебазирования, применяя коммиты согласно вашим инструкциям.

Когда используется git rebase -i:

  • Очистка локальной истории: Перед тем, как отправить свои изменения в удаленный репозиторий, вы можете использовать git rebase -i, чтобы сделать историю ветки более чистой и понятной. Это особенно полезно, если у вас есть много мелких коммитов, которые можно объединить в один более логичный.
  • Объединение (squashing) коммитов: Часто бывает, что во время разработки приходится делать небольшие коммиты с пометками "fix", "wip" (work in progress). git rebase -i позволяет объединить эти коммиты в один более значимый, что улучшает читаемость истории проекта.
  • Редактирование сообщений коммитов (rewording): Если вы допустили ошибку в сообщении коммита, или хотите сделать его более информативным, git rebase -i позволяет изменить сообщение любого коммита.
  • Удаление коммитов (dropping): Если вы случайно сделали коммит, который не нужен, или который содержит ошибки, вы можете удалить его из истории с помощью git rebase -i.
  • Переупорядочивание коммитов: Иногда порядок коммитов нелогичен. git rebase -i позволяет изменить порядок коммитов для создания более осмысленной последовательности изменений.
  • Редактирование содержимого коммитов (editing): Вы можете приостановить перебазирование на определенном коммите, чтобы внести изменения в его содержимое с помощью опции `edit`. Это полезно, если вы хотите исправить ошибки, внесенные в предыдущем коммите.

Важно: Используйте git rebase -i только на ветках, которые еще не отправлены в удаленный репозиторий (или, по крайней мере, не используются другими разработчиками). Перебазирование изменяет историю, и если другие разработчики уже получили старую историю, это может привести к серьезным проблемам при слиянии.

Пример использования: git rebase -i HEAD~3 (откроет последние 3 коммита для редактирования).

0