2012-05-02 13 views
15

Diciamo che ho un ramo di argomento di cui voglio riscrivere l'intera cronologia poiché è stato originariamente creato dal master per una richiesta pull. Per qualsiasi motivo, non è facile o ovvio usando git log per determinare l'hash impegnarsi voglio passare perRebase interattivo di un ramo con il suo punto di divergenza dal master

git rebase -i <commit> 

So che posso usare git merge-base <branch1> <branch2 || master> per trovare il commit che le due riferimenti in grado di rintracciare i loro antenati da e posso usare quello per determinare il commit. Quello che vorrei sapere è se c'è un modo migliore per rebase interattivo tutto questo ramo (se maestro ha avanzato o meno) rispetto all'utilizzo

git rebase -i `git merge-base my_branch master` 

EDIT: Io non voglio cambiare il genitore del primo commit fatto su questo ramo in modo che git rebase -i master funzioni solo nel caso in cui entrambi i master non siano avanzati da quando il ramo è stato creato e il ramo è stato creato dal master di commit a cui punta attualmente.

+0

Questa non è una risposta, ma un trucco interessante che mi è venuto in mente. Ho inserito quanto segue nel mio profilo. 'function gri() { git rebase -i \' git merge-base $ @ master \ ' }' – Aaron

risposta

12

Forse sto fraintendendo la tua domanda, ma penso che git rebase -i master dovrebbe fare quello che vuoi. Calcolerà la base di unione e rebase l'intero ramo da quel punto all'attuale HEAD in modo che sembri essere derivato dalla punta attuale del master.

Inoltre, se il master non è avanzato, il rebasing sarà praticamente un no-op.

+0

Grazie. In seguito mi sono reso conto che git rebase - il mio maestro l'avrebbe fatto, ma cosa sarebbe successo se volessi rebase in modo interattivo senza cambiare la testa del mio ramo per essere l'attuale capo del master nel caso in cui non fossero già gli stessi. – Aaron

+0

Se si è in 'my-branch' ed è in esecuzione' git rebase -i master', aggiornerà solo il ref di 'my-branch' - non aggiornerà' master'. Rebasing sposta il ramo _current_ in un altro punto del suo ramo parent (o potenzialmente su un ramo completamente diverso se si usa '--onto'), ma non modifica nessun altro ramo. – twalberg

+0

Scusate, suppongo che quello che intendevo fosse un modo più semplice di quello che ho postato sopra per rebase un ramo al commit sul master da cui proveniva senza cambiare il genitore del primo commit del ramo. – Aaron

Problemi correlati