Supponiamo che io sono un ramo che si compone di tre commit, uno dei quali vuoti:Rebase sulla radice e mantenere vuoto commette
# On branch test
3208910 empty
85c949c bar
0c1a615 foo
voglio rebase sulla radice e dalla pagina man sembra che --root --keep-empty
è esattamente ciò di cui ho bisogno.
Tuttavia, sia git rebase -i --root
e git rebase -i --root --keep-empty
omette il vuoto commit e mi mostra questo piano invece:
pick 0c1a615 foo
pick 85c949c bar
Come posso rebase l'intero ramo e mantenere commit vuoti allo stesso tempo?
P.S. Avevo bisogno di questo per rimuovere alcuni primi commit sul ramo e sono riuscito a farlo con filter-branch
come descritto in this SO answer, ma sono ancora interessato a sapere se rebase
è in grado di farlo. È un bug in Git che ho trovato? È difficile credere che questo comportamento sia intenzionale ma non ne sono sicuro.
P.P.S. Ho scoperto che posso modificare il piano a mano e aggiungere pick 3208910
.
Io in realtà non so perché. Ma ha a che fare con la bandiera '--root' che stai usando. Facendo lo stesso su un ramo - 'git rebase -i --keep-empty master' sembra funzionare come previsto. –
'git rebase -i --root --keep-empty --preserve-merges' funziona anche per qualche ragione. L'opzione '--root' è davvero strana, non capisco cosa sta succedendo lì ... – poke
@poke: probabilmente solo un bug ...' --root' internamente funziona impostando il target "on" sull'albero vuoto, che non è un commit ma funziona per cherry-pick. Non è immediatamente ovvio che cosa, ma senza l'impostazione di merge preservate, qualcosa sta rimuovendo il comando di selezione per il commit di diff vuoto, forse perché la differenza stessa è un albero vuoto e quindi corrisponde a $ su. – torek