2013-09-27 2 views
7

Supponendo di avere questo:Come git unire --squash in modo che github diagramma di "rete" mostra l'unione

 master: o--o--o 
development:  `o--o--o 

voglio unire le modifiche indietro come un commit (evitando tutte le cianfrusaglie impegna lungo il modo):

git checkout master 
git merge --squash development 

Ma poi la pagina di rete github mostra questo:

 master: o--o--o---------o 
development:  `o--o--o 

Cosa si fa a fare in modo che mostra ciò che ci si aspetta, vale a dire:

 master: o--o--o---------o 
development:  `o--o--o’ 
+0

Si ottiene l'ultimo grafico utilizzando 'git merge --no-ff'. Ma nota che i "junk commit" sono ancora lì. –

+0

Vale anche la pena notare che una "fusione di squash" non è una vera fusione (come mostra la cronologia); è davvero più di un "squash rebase". Probabilmente otterrai ciò che desideri realmente, eliminando prima 'sviluppo' (** riscrittura cronologia **) e quindi unendo normalmente il risultato in master. –

risposta

9

Per l'ultimo grafico, è possibile utilizzare il seguente comando:

git merge --no-ff 
git branch -d development 

master: o--o--o---------o 
       `o--o--o’ 

vi dica git per creare una stampa commettere, anche se la fusione il ramo è avanti veloce, cioè l'ultimo commit di master è un diretto antenato del ramo unito.

Nota che il "junk commit" non verrà eliminato, ma a meno che tu non abbia una buona ragione, dovresti mantenere la cronologia così com'è. Lo squashing rende difficile sfogliare la cronologia.

Se ritieni che la cronologia del tuo ramo di sviluppo sia piena di merda, puoi anche riscriverla prima di unire, utilizzando un rebase interattivo.

git checkout developement 
git rebase -i master 

Sarete in grado di scegliere, modificare, riordinare, squash, o scartare commit e riscrivere la vostra storia ramo. Una volta fatto, usa una fusione classica (con o senza --no-ff, come preferisci).