Що відбувається з історією комітів при rebase?
При git rebase історія комітів переписується - старі коміти замінюються новими, навіть якщо зміни в коді такі самі.
Це найголовніше, що потрібно розуміти про rebase.
Що означає «переписується історія»
Коли ти робиш rebase, Git:
- Бере коміти твоєї гілки
- Тимчасово «прибирає» їх
- Переміщує гілку на інший базовий коміт
- Створює нові коміти, застосовуючи зміни заново
Старі коміти перестають бути частиною історії гілки.
Візуально
До rebase:
A---B---C (main)
\
D---E (feature)Після rebase:
A---B---C---D'---E' (feature)
D'іE'- нові коміти- хеші змінилися
- оригінальні
DіEбільше не використовуються
Що саме змінюється
| Було | Стало |
|---|---|
| Коміт D | Коміт D' |
| Коміт E | Коміт E' |
| Старі хеші | Нові хеші |
| Розгалужена історія | Лінійна історія |
Навіть якщо код ідентичний, Git вважає їх різними комітами.
Чому це небезпечно для спільних гілок
Якщо гілка вже:
- запушена
- використовується іншими розробниками
Після rebase:
- у тебе інша історія
- у колег стара
- Git не може автоматично їх сумістити
Результат - конфлікти і «зламана» історія.
Як це формулюють на співбесіді
При
git rebaseісторія переписується: коміти пересоздаються з новими хешами, через що змінюється послідовність історії.
І часто додають:
Тому rebase не можна робити для публічних гілок.
Плюси такого підходу
- акуратна, лінійна історія
- легко читати
git log - зручно перед merge
Коротка відповідь (якщо зовсім коротко)
git rebaseпереписує історію комітів: старі коміти замінюються новими з іншими хешами.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.