2013-07-25 25 views
29

Ho un ramo di sviluppo e un ramo di funzionalità nel mio repository git. Ho aggiunto un commit da sviluppare e ora voglio che il commit venga unito al mio branch di funzionalità. Se faccio questoCome unire git commit nel ramo di sviluppo a un ramo di funzionalità

git checkout feature 
git merge develop 

Finisco con un merge commit. Dal momento che fonderò nuovi commit per sviluppare frequentemente il mio branch di funzionalità, vorrei evitare tutti questi commit di unione non necessari. Ho visto questo answer che suggeriva di fare un git rebase develop ma finisce per riavvolgere il mio ramo troppo lontano e il rebase fallisce.

Aggiornamento: Quello che ho finito per fare era

git checkout feature 
git merge develop # this creates a merge commit that I don't want 
git rebase # this gets rid of the merge commit but keeps the commits from develop that I do want 
git push 

Aggiornamento: ho appena notato che l'originale commit su sviluppare ottiene un hash diverso quando mi si fondono poi Rebase al ramo di caratteristica. Non penso che sia quello che voglio perché alla fine ricomincerò a sviluppare la funzionalità e immagino che non sarà piacevole.

+0

Hmm, beh, so che puoi "schiacciare" i tuoi commit insieme quando rebase, come un modo per non avere così tanti commit sul tuo ramo. Dai un'occhiata a http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html. – Houdini

+4

Rebasso * è * la risposta, se non funziona per te, c'è un'altra domanda che dovresti chiedere * perché * non funziona. – meagar

risposta

29

Per integrare un ramo in un altro, è necessario unire o rebase. Dal momento che è solo sicuro rebase commit che non sono referenziati da nessun'altra parte (non uniti ad altri rami locali, non inviati a nessun altro), generalmente è meglio unire.

Se il ramo di funzionalità è puramente locale, è possibile rebase sopra lo sviluppo. Tuttavia, ci vuole tempo per capire come funziona rebase e, prima di farlo, è abbastanza facile produrre accidentalmente duplicati o commessi. Unisci commit potrebbe sembrare rumoroso, ma la fusione è garantita per essere sempre sicura e prevedibile.

Per una migliore visualizzazione, prova ad accedere tutto insieme in un grafico:

git log --all --graph --oneline --decorate 

E 'anche la pena di considerare se si ha realmente bisogno i commit su develop fuse in feature. Spesso sono cose che possono essere lasciate separate fino a quando lo feature viene unito in develop in seguito.

Se si rileva regolarmente che è necessario il codice develop su feature, potrebbe essere un segnale che i rami delle funzionalità sono troppo lunghi. Idealmente le caratteristiche dovrebbero essere divise in modo che possano essere lavorate indipendentemente, senza bisogno di regolare integrazione lungo il percorso.

11

Se si desidera solo un commit dal ramo develop si può cherry-pick nel vostro feature filiale:

git checkout feature 
git cherry-pick -x <commit-SHA1> 

il commit sarà applicata come uno nuovo in cima al vostro ramo (a condizione che doesn generare un conflitto) e quando si unirà di nuovo il ramo feature, Git lo gestirà senza conflitti.