Git Rebase
Последнее обновление
git rebase перемещает коммиты вашей ветки так, чтобы они переприменялись поверх другой ветки, создавая прямую линейную историю вместо коммита слияния. Интерактивный rebase (-i) идёт дальше, позволяя объединять, переупорядочивать, редактировать или удалять коммиты. Поскольку rebase переписывает коммиты, делайте это только с работой, которой вы ещё не поделились.
Попробуйте это в терминальном playground - настоящей оболочке в вашем браузере, ничего не нужно устанавливать.
Синтаксис
| Command | What 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 на одно из этих.
| Keyword | What 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 также разбирает перебазирование шаг за шагом.