2015-12-30 34 views
9

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.

+7

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. –

+4

'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

+3

@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

risposta

Problemi correlati