2011-12-22 9 views
5

Supponiamo che abbia un ramo principale e un ramo di funzionalità. Ho fuso il ramo principale nel ramo di funzionalità molte volte, ma ho avuto solo pochi conflitti di fusione molto minori. Voglio ripulire la cronologia in modo che alla fine ci sia un'unica unione. Qual è il metodo migliore per farlo?Combinare le unioni in un'unica unione

+1

Quando si dice ripulire la storia, è necessario essere più specifici. Se si desidera rimuovere le unioni dalla linea principale alla funzione, è necessario decidere come deve essere il ramo della funzione con quelle rimosse. Ad esempio, se alcuni lavori nel ramo della funzione dipendono dalle modifiche apportate alla linea principale (e successivamente unite nel ramo della funzionalità), la rimozione delle unioni causerà la mancata compilazione del ramo della funzione in quanto dipende dal codice rimosso. –

+0

@KevinBallard: questo è un punto valido. In alcuni casi, potresti voler spostare il ramo in alto. Non sono troppo preoccupato per questo, tuttavia, per questa domanda, voglio solo assicurarmi che il ramo si ricongiuda solo una volta – Casebash

risposta

1

Hai esaminato git rebase?

git co -b temp_feature feature 
git rebase master 

Questo dovrebbe ignorare le unioni, ma si dovrà ri-risolvere i conflitti. Crea anche il ramo temp_feature per un più facile ritorno ma lo stesso potrebbe essere ottenuto con reflog.

(Risposta sbagliata sotto: questo creerà singolo commit, non una sola unione: - /)

penso che il più semplice è quello di fare seguente:

git co master 
git merge --squash feature 

Questo creerà singolo commit dall'intero ramo delle funzionalità. Se non si desidera mantenere al ramo della funzione fare:

git branch -D feature 
1

Si può fare un rebase interattivo per raggiungere questo obiettivo, ma si dovrebbe farlo solo se non avete ancora condiviso che la storia con chiunque altro. Ciò significa in pratica che dovresti farlo solo se non hai fatto un git push a un repo condiviso.

1

Suoni come se si desidera cherrypick i commit non-merge per il ramo di funzionalità in ramo clean-feature, quindi infine unire il ramo clean-feature con l'ultimo master (qualunque cosa sia). Puoi usare rebase per accelerare parte di quella cherrypicking, che sfortunatamente non conosco un buon modo per farlo in un batter d'occhio, dato che non è qualcosa che faccio molto spesso. Sarebbe utile se hai una GUI che ti permette di selezionare più commit per essere cherrypicked in una volta.

Edit: Questa sarebbe una soluzione più concreta: How to cherry pick a range of commits and merge into another branch

Problemi correlati