2011-10-04 14 views
15

versione git 1.7.5.4fondersi con le filiali, non importa in quale si fondono?

Ho circa 5 filiali. Tutto dallo stesso ramo iniziale.

Voglio unire 2 rami insieme. ad esempio branch1 e branch2. Questi rami hanno molte differenze.

Attualmente sto lavorando su branch1 e ho appena realizzato che ci sono alcune modifiche che ho implementato nel branch2 che voglio nel ramo1.

qual è il modo migliore per unire?

checkout branch2 and merge branch1 

o

checkout branch1 and merge branch2 

O non importa quale ramo è necessario Checkout per fondersi con un altro ramo?

risposta

16

Di solito non importa se entrambi i rami sono topic o feature branch.

Tuttavia, se si dispone di un ramo di integrazione o di una diramazione che contrassegna ciò che è stato pubblicato, si desidera assolutamente utilizzare il ramo dell'integrazione di lunga durata come quello estratto e unire l'altro in esso.

La ragione di ciò è che il commit di unione segnerà il primo commit padre come quello proveniente dal ramo principale. La tua specifica tree-ish per la cronologia di quel ramo è facile ora.Per trovare il commit che è stato il 4 ° ultima in questo ramo, è sufficiente

git show head~4 

Se Unite da l'altro ramo qualche parte nel mezzo, si dovrebbe cambiare in modo esplicito alla seconda impegnarsi ovunque l'unione è stato fatto l'altra way:

git show head^^2^^ 

Ciò può causare problemi con rami principali per un altro motivo; la fusione in topic o feature branch viene definita "back merging" e non è una buona idea. Ricordo Linus Torvalds che soffiava il top quando i contributors lo fecero. Non gli avrebbe permesso di separare in modo pulito le caratteristiche che desiderava fondere per una revisione importante, in quanto i rami delle funzionalità porterebbero in una vecchia fusione di test che includeva cose che non desidera più.

Quindi, alla fine, se un ramo è più significativo ed è più di una semplice funzionalità, verificarlo e unirlo da lì. Sarai in grado di mantenere facilmente la sua cronologia vista come sai che è il primo genitore è sempre dove quel ramo era prima. Se non lo fai, dovrai fare affidamento sulla lettura dei messaggi di commit di fusione e non è altrettanto divertente. :)

Ho scritto un articolo su BPF che mostra un metodo rigoroso di mantenere rami organizzata: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

+1

+1 bel punto su come mantenere il primo percorso genitore utili –

+0

Cheers! Questi errori rendono la navigazione storica un incubo. –

3

Sto presumendo che desideri davvero unire l'intero ramo, piuttosto che scegliere semplicemente il commit dispari. Inoltre, quello che sto dicendo di seguito è fortemente basato su questo very helpful blog post by Junio C. Hamano, il manutentore di git, che consiglio vivamente di leggere se vuoi saperne di più sulla filosofia della ramificazione.

Purtroppo, non c'è davvero abbastanza informazioni nella sua domanda di dare buoni consigli su questo, perché la domanda dipende in modo critico sul scopo di ogni ramo. In uno scenario comune, ad esempio, si potrebbe avere un ramo master da cui si dovrebbe sempre essere in grado di generare una versione stabile. Quando qualcuno vuole aggiungere una nuova funzionalità al software, potrebbe creare un ramo argomento dal master chiamato awesome-feature su cui lavorano, eventualmente rebase, testare accuratamente e così via. Quando tutti sono soddisfatti di quel ramo, ha quindi senso unire awesome-feature in master, non viceversa. (Il contrario significherebbe, approssimativamente, che tutto nel master aiuta a implementare la "caratteristica fantastica" per cui è il ramo dell'argomento.) Si può solo dire in quale direzione è giusto, tuttavia, perché conosciamo lo scopo di ogni ramo .

Branching and merging è così facile da comprendere che supporta molti diversi flussi di lavoro, da highly structured, a rather simpler, totalmente non strutturati. Per "totalmente non strutturato", intendo che ci sono diversi rami di sviluppo e le persone si fondono tra loro in qualsiasi modo sembrano includere le caratteristiche che desiderano in un particolare ramo - se ti trovi in ​​una situazione del genere, dove non c'è chiaramente scopo definito per ogni ramo, potrebbe non essere importante se si uniscono branch1 in branch2 o viceversa. Tuttavia, trovo molto più utile avere uno scopo più chiaro per ogni ramo, nel qual caso il modo in cui unisci due rami è importante.