GIT unisce master in un ramo


49

Ho sviluppato una nuova funzionalità in una nuova filiale e, a parte, ho apportato alcune modifiche alla mia filiale principale.

È possibile unire il ramo principale nel mio nuovo ramo per mantenerlo aggiornato in modo che non avrò troppi conflitti di fusione una volta terminata la nuova funzionalità?


Hai provato git-merge? Aiuta qui .
Karatedog,

Risposte:


56

Puoi o git merge mastero git rebase master, in questo caso, preferirei git rebase .

Perché lo git rebaserende come se le modifiche sul ramo della funzione fossero state apportate in cima alle modifiche sul ramo principale, il che rende il grafico della versione più semplice.

rebase

Prendendo l'esempio dal manuale di git rebase , git rebase masternel ramo feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

Tuttavia, git rebaseè adatto solo quando la filiale non è stata distribuita, o ci saranno confusione e lavoro extra a valle, perché i vecchi commit A, B, C sono ora sostituiti da nuovi commit A ', B', C ', più F e G che prima non c'erano.

Il risultato effettivo dopo git rebase masterin branch featureè questo:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

I commit A, B, C sono sospesi dopo il rebase, ma sono raggiungibili attraverso git reflog feature.

Merge

Se qualcuno ha spostato il tuo ramo o l'hai spinto da qualche parte, dovresti invece fonderti in esso, per evitare confusione e lavoro extra dall'altra parte. Vedere Ripristino da rebase a monte .

Questo è il risultato di git merge masternel ramo feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

In alternativa, se sei git merge featurenel ramo master, sarebbe simile al seguente:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master

Dovresti spiegare perché preferisci rebase e qual è la differenza. Rebase crea una cronologia lineare - questo potrebbe non adattarsi a questa domanda.
Andreas Rehm,

Ok se lo capisco bene: devo verificare il ramo master se la nuova funzionalità non è ancora finita e un rebase se è finito?
mnml

No, con il ramo della funzionalità estratto, esegui git rebase mastere "riformulerà" le modifiche nel ramo della funzione in modo che siano "basate" sulle modifiche nel ramo principale. Se le modifiche nel ramo principale sono in conflitto con le modifiche nel ramo funzione, git ti chiederà di risolverli e di continuare, saltarli o interrompere. Se non sei sicuro, puoi provare un ramo di prova per provarlo git checkout -b test-feature feature(supponendo che il ramo della tua funzione sia chiamato "caratteristica").
Christoffer Hammarström,

2
Cosa intendi con "non riesco più a vedere il mio ramo"? Ad ogni modo, git rebasedovrebbe essere usato solo se la filiale non è stata distribuita, cosa che presumo fosse il caso poiché hai detto che era una nuova filiale, mi dispiace per quello. Vedi Ripristino da rebase a monte nei documenti a cui mi sono collegato. Dovrai git mergeinvece usare . E puoi usare git reflogper trovare la tua precedente diramazione della funzione se vuoi recuperarla.
Christoffer Hammarström,

1
Non ho mai visto una spiegazione più chiara sulle differenze tra unione e rebase. Grazie.
Paulo Pedroso,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.