GIT Merge Master in eine Filiale

49

Ich habe ein neues Feature für einen neuen Zweig entwickelt und nebenbei einige Änderungen an meinem Hauptzweig vorgenommen.

Ist es möglich, den Hauptzweig in meinem neuen Zweig zusammenzuführen, um ihn auf dem neuesten Stand zu halten, sodass nach Abschluss des neuen Features nicht zu viele Zusammenführungskonflikte auftreten?

mnml
quelle
Haben Sie versucht, Git-Merge? Helfen Sie hier .
Karatedog

Antworten:

56

Sie können entweder git merge masteroder git rebase master, in diesem Fall würde ich Git Rebase bevorzugen .

Weil git rebasees so aussieht, als ob die Änderungen im Feature-Zweig über den Änderungen im Master-Zweig vorgenommen wurden, wodurch das Versionsdiagramm einfacher wird.

Rebase

Nehmen wir das Beispiel aus dem git rebase Handbuch , git rebase masterin Zweig feature:

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

Dies git rebaseist jedoch nur dann sinnvoll, wenn die Verzweigung nicht verteilt wurde, da die alten Commits A, B, C jetzt durch neue Commits A ', B', C 'und F ersetzt werden und G, die vorher nicht da waren.

Das eigentliche Ergebnis nach git rebase masterin branch featureist folgendes:

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

Commits A, B, C baumeln nach dem Rebase, sind aber über erreichbar git reflog feature.

Verschmelzen

Wenn jemand an Ihrem Zweig gezogen hat oder Sie ihn irgendwo hingeschoben haben, sollten Sie stattdessen in ihn einarbeiten, um Verwirrung und zusätzliche Arbeit am anderen Ende zu vermeiden. Siehe Wiederherstellung nach Upstream-Rebase .

Dies ist das Ergebnis von git merge masterin branch feature:

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

Wenn Sie sich git merge featurein einem Zweig befinden master, würde dies alternativ so aussehen:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master
Christoffer Hammarström
quelle
Sie sollten erklären, warum Sie Rebase bevorzugen und worin der Unterschied besteht. Rebase erstellt einen linearen Verlauf - dies passt möglicherweise nicht zu dieser Frage.
Andreas Rehm
Ok, wenn ich es gut verstehe: Ich muss den Master-Zweig auschecken, wenn das neue Feature noch nicht fertig ist, und eine Neueinstufung, wenn es fertig ist?
mnml
Nein, git rebase masterwenn der Feature-Zweig ausgecheckt ist , wird ausgeführt , und die Änderungen im Feature-Zweig werden "neu berechnet", sodass sie auf den Änderungen im Master-Zweig "basieren". Wenn die Änderungen im Master-Zweig mit den Änderungen im Feature-Zweig in Konflikt stehen, werden Sie von git aufgefordert, sie aufzulösen und fortzusetzen, zu überspringen oder abzubrechen. Wenn Sie sich nicht sicher sind, können Sie einen Testzweig auschecken, um ihn git checkout -b test-feature featureanzuprobieren (vorausgesetzt, Ihr Feature-Zweig heißt "Feature").
Christoffer Hammarström
2
Was meinst du mit "kann meine Filiale nicht mehr sehen"? Wie auch immer, git rebasesollte nur verwendet werden, wenn der Zweig nicht verteilt wurde, was meiner Meinung nach der Fall war, da Sie sagten, es sei ein neuer Zweig, tut mir leid. Siehe Wiederherstellung nach Upstream-Rebase in den Dokumenten, mit denen ich verknüpft bin . Sie müssen git mergestattdessen verwenden. Mit können Sie den git reflogKopf Ihres vorherigen Feature-Zweigs suchen, wenn Sie ihn zurückholen möchten.
Christoffer Hammarström
1
Ich habe noch nie eine klarere Erklärung für die Unterschiede zwischen Zusammenführen und Wiederherstellen gesehen. Danke.
Paulo Pedroso