linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Ветки и слияния/interactive-rebase

kb/branching ── Ветки и слияния ── intermediate

Interactive rebase

`git rebase -i <base>` открывает редактор со списком коммитов от `<base>` до HEAD, где можно переименовывать, объединять, удалять и переставлять их. Главный инструмент для очистки локальной истории.

view as markdownaka: rebase-i, i-rebase

Обычный git rebase main молча применяет коммиты один за другим в исходном порядке. Interactive (-i) даёт shell-меню над коммитами.

Запуск

bash
git rebase -i main           # все коммиты текущей ветки от main
git rebase -i HEAD~5         # последние 5 коммитов
git rebase -i <sha>          # коммиты после указанного sha

Откроется редактор:

pick a1b2c3d add login form skeleton
pick d4e5f6a fix typo
pick 7a8b9c0 wire up backend
pick b1c2d3e address review comments
pick f4e5d6c another fix
# Команды:
# p, pick    = использовать коммит
# r, reword  = использовать, поменять сообщение
# e, edit    = использовать, остановиться для правки
# s, squash  = слить с предыдущим (объединить сообщения)
# f, fixup   = слить с предыдущим, отбросить сообщение
# d, drop    = удалить коммит
# x          = выполнить shell-команду
# b, break   = остановиться (как edit, без правки коммита)

Меняешь pick на нужную команду, сохраняешь, выходишь. Git переиграет историю по новой инструкции.

Самое частое

Squash «процессуального шума» перед PR.

pick a1b2c3d feat: add login form
squash d4e5f6a fix typo
squash 7a8b9c0 wire up backend

Три коммита станут одним «feat: add login form» с объединёнными правками. Git предложит отредактировать общее сообщение.

Fixup без редактирования сообщения.

Аналогично squash, но не открывает редактор сообщений - использует сообщение первого коммита, отбрасывает остальные.

pick a1b2c3d feat: add login form
fixup d4e5f6a fix typo

Reword.

Поправить сообщение коммита, который уже не последний (для последнего достаточно git commit --amend).

reword a1b2c3d add login form skeleton
pick d4e5f6a real change

Drop.

Удалить случайный коммит (debug-print, временный TODO).

pick a1b2c3d feat: add login form
drop d4e5f6a console.log everywhere
pick 7a8b9c0 real next change

Перестановка.

Если порядок коммитов нелогичен - просто переставь строки в редакторе. Git применит в новом порядке (если правки совместимы).

После interactive rebase

Локальная история переписана, у коммитов новые SHA. Если ветка запушена - нужен push --force-with-lease.

Подводные камни

  • Не делать на публичных ветках. Переписанная история ломает всех, кто склонил старую версию.
  • Перестановка может привести к конфликтам. Если второй коммит зависит от первого, а ты ставишь его первым - будет конфликт, придётся разрешать.
  • drop удаляет, не откатывает. Если нужно публично откатить коммит, используй git revert. drop удаляет коммит из истории, как будто его не было.
    • x - мощный, но рискованный. x запускает shell-команду после применения коммита. Например x make test - остановит rebase, если тесты упадут. Удобно для проверки атомарности.

§ команды

bash
git rebase -i HEAD~5

Открыть меню для последних 5 коммитов

bash
git rebase -i --autosquash

Авто-расставить fixup для коммитов вида `fixup! <subject>`

bash
git commit --fixup=<sha>

Создать коммит, предназначенный для fixup в будущем rebase

§ см. также

  • rebasegit rebaseПереписывает коммиты ветки, делая их потомками другого коммита. Создаёт новые SHA, история становится линейной. Безопасен только для веток, которые ещё никто, кроме автора, не видел.
  • amendgit commit --amendПереписывает последний коммит - меняет сообщение, подмешивает забытые правки, поправляет содержимое. Создаёт новый объект с новым SHA. Безопасен до push, опасен после.
  • cherry-pickgit cherry-pickБерёт один коммит из другой ветки и применяет его на текущую, создавая дубликат с новым SHA. Используется для hotfix'ов в нескольких релиз-ветках и переноса одиночных коммитов.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки