2010-11-08 7 views
18

Ho eseguito alcune modifiche sul ramo principale del mio repository git e lo ho spostato a monte (anche se sono l'unico a risolverlo.) Che cosa voglio fare è tirare fuori questi ultimi commit, far tornare indietro il master prima dei commit effettuati, riapplicare i commit sul ramo di sviluppo e poi unirli nuovamente al master.Spostamento di commit da un ramo all'altro

Ecco ciò che il mio repository assomiglia ora:

a [master] [remotes/origin/master] 
| 
b 
| 
c 
| 
d (merge branch 'develop') 
|\ 
| \ 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Ed ecco quello che voglio farlo sembrare come:

Z [master] [remotes/origin/master] 
|\ 
| \ 
| A 
| | 
| B 
| | 
d C 
|\ | 
| \| 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Posso avere un aiuto su questo? Penso che questo sia un lavoro per rebase, ma non sono abbastanza sicuro di come farlo accadere.

+5

I suoi schemi mi confuse per un po '- in futuro, potresti voler etichettare i tuoi commit in ordine cronologico anziché inverso. – Cascabel

risposta

27

Ecco a voi:

# move cba onto e 
git branch foo 
git rebase --onto <SHA1-e> <SHA1-d> foo 

# rewind master to d 
git checkout master 
git reset --hard <SHA1-d> 

# merge 
git merge foo 

Si potrebbe desiderare di scegliere un nome più descrittivo di ramo foo, dal momento che sarà registrato nella fusione messaggio di commit per Z.

+0

Grazie, è quello di cui avevo bisogno. Stavo arrivando a metà, ma il reset era ciò che mi mancava. – Doug