Eine Einführung in Git Merge und Git Rebase: Was sie tun und wann sie verwendet werden

Als Entwickler müssen sich viele von uns zwischen Merge und Rebase entscheiden. Bei all den Referenzen, die wir aus dem Internet erhalten, sind alle der Meinung, dass "Verwenden Sie Rebase nicht, da dies schwerwiegende Probleme verursachen kann." Hier erkläre ich, was Zusammenführen und Rebase bedeutet, warum Sie sie verwenden sollten (und nicht) und wie um das zu tun.

Git Merge und Git Rebase dienen demselben Zweck. Sie sind so konzipiert, dass Änderungen aus mehreren Filialen in eine integriert werden. Obwohl das Endziel dasselbe ist, wird es mit diesen beiden Methoden auf unterschiedliche Weise erreicht, und es ist hilfreich, den Unterschied zu kennen, wenn Sie ein besserer Softwareentwickler werden.

Diese Frage hat die Git-Community gespalten. Einige sind der Meinung, dass Sie sich immer zurücklehnen sollten, andere wiederum, dass Sie sich immer zusammenschließen sollten. Jede Seite hat einige überzeugende Vorteile.

Git Merge

Das Zusammenführen ist eine gängige Praxis für Entwickler, die Versionskontrollsysteme verwenden. Durch das Zusammenführen von Zweigen, die zum Testen, zur Behebung von Fehlern oder aus anderen Gründen erstellt werden, werden Änderungen an einem anderen Speicherort festgeschrieben. Insbesondere werden beim Zusammenführen die Inhalte eines Quellzweigs in einen Zielzweig integriert. In diesem Prozess wird nur der Zielzweig geändert. Der Quellzweigverlauf bleibt unverändert.

Master zusammenführen -> Feature-Zweig

Vorteile

  • Einfach und vertraut
  • Erhält die vollständige Geschichte und chronologische Reihenfolge
  • Behält den Kontext des Zweigs bei

Nachteile

  • Der Commit-Verlauf kann durch viele Merge-Commits verschmutzt werden
  • Das Debuggen mit Git Bisect kann schwieriger werden

Wie es geht

Fügen Sie den Master-Zweig mit den Befehlen checkout und merge in den Feature-Zweig ein.

$ git Checkout-Funktion
$ git Merge Master
(oder)
$ Git Merge Master-Funktion

Dadurch wird im Feature-Zweig ein neues "Merge-Commit" erstellt, das den Verlauf beider Zweige enthält.

Git Rebase

Durch einen Neustart können Änderungen von einem Zweig in einen anderen integriert werden. Rebase komprimiert alle Änderungen in einem einzigen "Patch". Anschließend wird der Patch in den Zielzweig integriert.

Im Gegensatz zum Zusammenführen wird beim erneuten Basieren die Historie geglättet, da die abgeschlossene Arbeit von einem Zweig in einen anderen übertragen wird. Dabei wird unerwünschte Historie beseitigt.

Neuansichten sind die Art und Weise, in der Änderungen von der Spitze der Hierarchie nach unten verlaufen sollen, und Zusammenführungen sind die Art und Weise, in der sie wieder nach oben verlaufen
Feature-Zweig in Master neu starten

Vorteile

  • Optimiert eine möglicherweise komplexe Geschichte
  • Das Manipulieren eines einzelnen Commits ist einfach (z. B. Zurücksetzen).
  • Vermeidet Merge Commit "Noise" in ausgelasteten Repos mit ausgelasteten Filialen
  • Bereinigt Zwischen-Commits, indem sie zu einem einzigen Commit gemacht werden, was für DevOps-Teams hilfreich sein kann

Nachteile

  • Wenn Sie die Funktion auf eine Handvoll Commits beschränken, wird der Kontext möglicherweise ausgeblendet
  • Das Zurücksetzen öffentlicher Repositorys kann bei der Arbeit im Team gefährlich sein
  • Es ist mehr Arbeit: Verwenden von Rebase, um Ihren Feature-Zweig immer auf dem neuesten Stand zu halten
  • Für das Zurücksetzen mit Remote-Zweigen müssen Sie Push erzwingen. Das größte Problem für die Leute ist, dass sie Push erzwingen, aber keine Git-Push-Standardeinstellungen festgelegt haben. Dies führt zu Aktualisierungen aller Zweigstellen mit demselben Namen, sowohl lokal als auch remote, und es ist schrecklich, damit umzugehen.
Wenn Sie den Verlauf falsch und unbeabsichtigt neu schreiben, kann dies zu schwerwiegenden Problemen führen. Vergewissern Sie sich also, dass Sie wissen, was Sie tun.

Wie es geht

Führen Sie die folgenden Befehle aus, um den Feature-Zweig erneut in den Master-Zweig zu kopieren.

$ git Checkout-Funktion
$ git Rebase Master

Dadurch wird der gesamte Feature-Zweig über den Master-Zweig verschoben. Dazu wird der Projektverlauf neu geschrieben, indem für jedes Commit im ursprünglichen Zweig (Feature) neue Commits erstellt werden.

Interaktives Rebasing

Auf diese Weise können die Commits geändert werden, wenn sie in den neuen Zweig verschoben werden. Dies ist leistungsfähiger als die automatische Rebase, da hiermit die vollständige Kontrolle über den Festschreibungsverlauf der Zweigstelle möglich ist. In der Regel wird dies verwendet, um einen fehlerhaften Verlauf zu bereinigen, bevor ein Feature-Zweig mit dem Master zusammengeführt wird.

$ git Checkout-Funktion
$ git rebase -i master

Dadurch wird der Editor geöffnet, indem alle zu verschiebenden Commits aufgelistet werden.

pick 22d6d7c Commit message # 1
pick 44e8a9b Commit message # 2
wähle 79f1d2h Commit message # 3

Dies definiert genau, wie die Verzweigung aussehen wird, nachdem die Neugründung durchgeführt wurde. Indem Sie die Entitäten neu anordnen, können Sie den Verlauf so gestalten, wie Sie möchten. Beispielsweise können Sie anstelle von pick Befehle wie fixup, squash, edit etc verwenden.

Welches zu verwenden

Was ist das Beste? Was empfehlen die Experten?

Es ist schwer zu verallgemeinern und sich für das eine oder andere zu entscheiden, da jedes Team anders ist. Aber wir müssen irgendwo anfangen.

Teams müssen verschiedene Fragen berücksichtigen, wenn sie ihre Git-Rebase- oder Merge-Richtlinien festlegen. Denn wie sich herausstellt, ist eine Workflow-Strategie nicht besser als die andere. Es ist abhängig von Ihrem Team.

Berücksichtigen Sie den Grad der Neugründung und die Git-Kompetenz in Ihrer Organisation. Bestimmen Sie, inwieweit Sie die Einfachheit der Neugründung im Vergleich zur Rückverfolgbarkeit und zum Verlauf der Zusammenführung schätzen.

Schließlich sollten Entscheidungen zum Zusammenführen und erneuten Basieren im Kontext einer eindeutigen Verzweigungsstrategie berücksichtigt werden. (Weitere Informationen zur Verzweigungsstrategie finden Sie in diesem Artikel.) Eine erfolgreiche Verzweigungsstrategie basiert auf der Organisation Ihrer Teams.

Was kann ich empfehlen?

Mit zunehmendem Teamwachstum wird es schwierig, Entwicklungsänderungen mit einer Richtlinie zur ständigen Zusammenführung zu verwalten oder nachzuverfolgen. Um einen sauberen und verständlichen Commit-Verlauf zu erhalten, ist die Verwendung von Rebase sinnvoll und effektiv.

Wenn Sie die folgenden Umstände und Richtlinien berücksichtigen, können Sie Rebase optimal nutzen:

  • Sie entwickeln vor Ort: Wenn Sie Ihre Arbeit nicht mit anderen geteilt haben. An diesem Punkt sollten Sie es vorziehen, die Basis neu zu bestimmen, anstatt sie zusammenzuführen, um den Verlauf sauber zu halten. Wenn Sie Ihre persönliche Abspaltung des Repositorys haben und diese nicht mit anderen Entwicklern geteilt wird, können Sie das Repository auch dann wiederherstellen, wenn Sie es in Ihre Filiale verschoben haben.
  • Ihr Code ist zur Überprüfung bereit: Sie haben eine Pull-Anfrage erstellt. Andere überprüfen Ihre Arbeit und holen sie möglicherweise zur lokalen Überprüfung in ihre Abzweigung. Zu diesem Zeitpunkt sollten Sie Ihre Arbeit nicht neu strukturieren. Sie sollten Überarbeitungs-Commits erstellen und Ihren Feature-Zweig aktualisieren. Dies hilft bei der Rückverfolgbarkeit in der Pull-Anforderung und verhindert den versehentlichen Verlaufsbruch.
  • Die Überprüfung ist abgeschlossen und kann in die Zielbranche integriert werden. Herzliche Glückwünsche! Sie sind dabei, Ihren Feature-Zweig zu löschen. Da diese Änderungen von nun an nicht mehr von anderen Entwicklern übernommen werden, ist dies Ihre Chance, Ihren Verlauf zu bereinigen. An diesem Punkt können Sie den Verlauf neu schreiben und die ursprünglichen Commits und diese lästigen Pr-Überarbeitungs- und Merge-Commits zu einer kleinen Gruppe fokussierter Commits zusammenfassen. Das Erstellen einer expliziten Zusammenführung für diese Commits ist optional, hat jedoch einen Wert. Es zeichnet auf, wann das Feature den Master-Status erreicht hat.

Fazit

Ich hoffe, diese Erklärung hat einige Einblicke in Git Merge und Git Rebase gegeben. Die Strategie von Merge vs. Rebase ist immer umstritten. Aber vielleicht hilft Ihnen dieser Artikel, Ihre Zweifel zu zerstreuen und einen Ansatz zu finden, der für Ihr Team funktioniert.

Ich freue mich darauf, über Git-Workflows und Git-Konzepte zu schreiben. Kommentieren Sie die Themen, über die ich als Nächstes schreiben soll. Prost!

Code = Kaffee + Entwickler

Hier ist eine weitere nützliche Referenz

  • So übernehmen Sie eine Git-Verzweigungsstrategie

Codierschule für Softwareentwickler