git rebase
Перенести коммиты ветки на новую основу или переписать последние коммиты
Что делает
git rebase main берёт коммиты текущей ветки и заново применяет их поверх свежего main — как будто работа началась только что. История получается прямой, без коммитов слияния. Если коммит конфликтует с новой основой, git остановится: поправьте файлы, добавьте их через git add и продолжите git rebase --continue или отмените всё через git rebase --abort.
С флагом -i rebase становится интерактивным: git откроет редактор со списком коммитов, где каждый можно оставить (pick), переименовать (reword), склеить с предыдущим (squash) или удалить (drop). Так приводят историю в порядок перед pull request.
Осторожно. rebase создаёт новые коммиты вместо старых. Не перебазируйте коммиты, которые уже есть в общей ветке: у коллег история разойдётся с вашей. Свою ветку после rebase придётся отправить через git push --force-with-lease.
Синтаксис
git rebase <ветка>
git rebase -i <коммит>
git rebase --continue
git rebase --abortПримеры
Перенести коммиты текущей ветки поверх свежего main
git rebase mainrebase— переписать ветку поверх другойmain— новая основа
Интерактивно отредактировать три последних коммита
git rebase -i HEAD~3то же самое:
git rebase --interactive HEAD~3rebase— переписать историю-i— интерактивно: squash, reword, dropHEAD~3— три последних коммита