2013-03-14 26 views
7

da ora, so che c'è un bel modo come combinare commit e cambiare il messaggio di commit utilizzando 'git rebase --interactive'Git rebase: Combine commit non-successive

Avere la seguente situazione:

$ git rebase --interactive HEAD^^^^ 
pick 5b7c140 commitA 
pick 40ffd7c commitB 
pick 5e7647d commitC 
pick 78bea2d commitD 

Rebase [...] 

c'è anche la possibilità di gestire i seguenti requisiti:

Combinando commitA e commitC e commitB e commitD al nuovo commit CAC e CBD?

risposta

12

E 'possibile - si può anche cambiare l'ordine dei commit con rebase interattivo:

pick 5b7c140 commitA 
squash 5e7647d commitC 
pick 40ffd7c commitB 
squash 78bea2d commitD 

o

pick 5b7c140 commitA 
fixup 5e7647d commitC 
pick 40ffd7c commitB 
fixup 78bea2d commitD 

La differenza tra i due è che squash consente di modificare il commit messaggio per i nuovi commit, mentre fixup getta via il secondo messaggio di commit lasciando il precedente messaggio di commit pick in posizione per il commit combinato. (Se il tuo editor di lancia abbastanza velocemente, quindi avere l'abitudine di solo scegliere squash ti dà una bella occasione di rivedere il messaggio di commit, anche se si pensa che non avrebbe probabilmente bisogno di usare le parti del messaggio del fixup commit.)

Esiste la possibilità di conflitto di rebase se il tuo commitB e commitC modifica una stessa parte di un file. Spesso questi possono essere facilmente risolti.

+1

Nel mio caso: nessun file in conflitto per quanto riguarda questi commit. Git è semplicemente fantastico, pensavo di dover mantenere l'ordine di commit. Molte grazie! :) –

+1

@John - 'git rebase -i' è uno strumento molto potente !!! – FooF