2012-03-29 9 views
9

Ho un ramo "master" e diversi rami di argomenti. Supponiamo che il master branch sia utilizzato principalmente come release candidate e nessun lavoro di sviluppo avvenga su questo ramo.Rifondazione dopo l'unione squash?

I rami dell'argomento sono diversi e sono condivisi dal team. Alcuni dei rami hanno più di uno sviluppatore che lavora su di essi. Tutti i rami degli argomenti vengono periodicamente aggiornati dal ramo principale.

Per ripulire la cronologia nel ramo "master", ho eseguito un "git merge --quash" durante l'unione del codice dall'argomento ai rami master. Questo ha funzionato perfettamente bene.

Ora - quando i rami dell'argomento vengono reimpostati - i commit vengono duplicati. C'è un modo per ripulire i commit sui rami degli argomenti dopo che 'git merge --quash' ha avuto successo?

+0

non funzionerà perfettamente soddisfacente nel caso di [file cancellati] (http://stackoverflow.com/a/14343784/281545). Forse non è la strada da percorrere - vedi [qui] (http://stackoverflow.com/questions/1464642/git-merge-squash- ripetutamente) –

risposta

7

lascia supporre di avere il seguente scenario:

A - B - C (master) 
\ 
    D - E (topic) 

Se si uniscono argomento in matrimoniale con --squash otterrete qualcosa di simile

A - B - C - F (master) 
\ 
    D - E (topic) 

Dove F contiene tutte le modifiche da D ed E La ridefinizione dell'argomento sul master non ha senso poiché il ramo dell'argomento è già in master (tramite F). Invece di ridimensionare, puoi spostare il ramo dell'argomento su F, ad es.

git checkout master 
git branch -f topic F 

che produce:

A - B - C - F (master/topic) 

Tutto quello che dovete fare ora è quello di spingere verso l'alto l'argomento ramo mosso:

git push -f origin topic 
+0

Grazie! Questo fa esattamente quello di cui avevo bisogno. – mustard

+0

Fai attenzione con lo squash: F potrebbe contenere file eliminati nel ramo dell'argomento, vedi http://stackoverflow.com/a/14343784/281545 –

3

ho usato per fare stessa cosa di Magnus solo con le coppie più comandi:

git checkout master 
git merge --squash topic 
git commit -m "Add topic feature" 

git branch -D topic 
git checkout -b topic 

git push -f origin topic 
Problemi correlati