Menu
Coddy logo textTech

Git Rebase

Последнее обновление

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

Попробуйте это в терминальном playground - настоящей оболочке в вашем браузере, ничего не нужно устанавливать.

Синтаксис

CommandWhat it does
git rebase mainПереприменяет ваши коммиты поверх main
git rebase -i HEAD~3Интерактивно редактирует последние 3 коммита
git rebase --onto main old newПеремещает диапазон коммитов на main
git rebase --continueПродолжает после разрешения конфликтов
git rebase --abortОтменяет rebase и восстанавливает ветку
git pull --rebaseДелает pull и rebase вместо merge

Ключевые слова интерактивного rebase

В редакторе, который открывает -i, замените pick на одно из этих.

KeywordWhat it does
pickСохраняет коммит
rewordСохраняет коммит, редактирует его сообщение
squashСворачивает в предыдущий коммит, объединяет сообщения
fixupСворачивает, но отбрасывает это сообщение
dropПолностью удаляет коммит

Часто задаваемые вопросы о git rebase

Что делает git rebase?
Он берёт коммиты вашей текущей ветки и переприменяет их один за другим поверх другой ветки, как если бы вы начали свою работу с последнего коммита той ветки. Результат - линейная история без коммита слияния. Коммиты при этом переписываются (получают новые хеши).
Что такое интерактивный rebase?
git rebase -i <base> открывает редактор со списком коммитов начиная с <base>, где вы можете переупорядочить их, squash несколько в один, reword сообщения, edit коммит или drop его. Это основной инструмент для наведения порядка в беспорядочной серии коммитов перед тем, как поделиться ими.
Каково золотое правило перебазирования?
Никогда не перебазируйте коммиты, на которых другие уже основали свою работу, - обычно всё, что запушено в общую ветку. Поскольку rebase переписывает коммиты, это заставляет всех остальных согласовывать разошедшуюся историю. Свободно перебазируйте локальные незапушенные коммиты; используйте merge или revert для публичных.
Как исправить или отменить rebase с конфликтами?
Когда rebase останавливается на конфликте, разрешите файлы, сделайте им git add, затем выполните git rebase --continue. Используйте git rebase --skip, чтобы отбросить текущий коммит, или git rebase --abort, чтобы полностью отменить и вернуть ветку в состояние до начала rebase.
Могу ли я потренироваться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить git rebase в настоящей оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс Git от Coddy также разбирает перебазирование шаг за шагом.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ