Welche Vorteile hat ein Rebase gegenüber einem Merge in Git?

Lesezeit: 4 Minuten

Benutzer-Avatar
Laser

Im Dieser Artikelerklärt der Autor das Rebasing mit diesem Diagramm:

Geben Sie hier die Bildbeschreibung ein

Rebase: Wenn Sie Ihre Branche noch nicht veröffentlicht oder klar kommuniziert haben, dass andere ihre Arbeit nicht darauf aufbauen sollten, haben Sie eine Alternative. Sie können Ihren Branch umbasieren, wobei Ihr Commit anstelle des Mergens durch ein anderes Commit mit einem anderen übergeordneten Element ersetzt und Ihr Branch dorthin verschoben wird.

während eine normale Zusammenführung so ausgesehen hätte:

Geben Sie hier die Bildbeschreibung ein

Also wenn du rebasierenverlieren Sie nur einen Verlaufsstatus (der irgendwann in der Zukunft von der Garbage Collection erfasst wird). Also, warum sollte jemand überhaupt eine Rebase machen wollen? Was fehlt mir hier?

  • Bilder funktionieren nicht

    – teobais

    25. April 2016 um 8:28 Uhr

Es gibt verschiedene Situationen, in denen Sie möglicherweise rebasieren möchten.

  • Sie entwickeln einige Teile eines Features in separaten Zweigen und stellen dann fest, dass es sich in Wirklichkeit um eine lineare Abfolge von Ideen handelt. Stellen Sie sie in diese Konfiguration um.

  • Du forkst ein Thema an der falschen Stelle. Vielleicht ist es zu früh (Sie brauchen etwas von später), vielleicht ist es zu spät (es gilt eigentlich auch für frühere Versionen). Verschieben Sie es an die richtige Stelle. Der “zu spät”-Fall kann eigentlich nicht durch eine Zusammenführung behoben werden, daher ist eine Neubasierung kritisch.

  • Sie möchten die Interaktion eines Zweigs mit einem anderen Zweig testen, aber aus irgendeinem Grund nicht zusammenführen. Beispielsweise möchten Sie vielleicht sehen, welche Konflikte Commit für Commit auftreten, anstatt alle auf einmal.

Das allgemeine Thema hier ist, dass exzessives Mergen die Historie durcheinander bringt, und Rebasing ist eine Möglichkeit, dies zu vermeiden, wenn Sie Ihren Branch/Merge-Plan nicht gleich auf den Punkt gebracht haben. Zu viele Zusammenführungen können es für einen Menschen schwierig machen, dem Verlauf zu folgen, und können es auch schwieriger machen, Tools wie z git-bisect.

Es gibt auch all die vielen Fälle, die zu einem interaktiven Rebase führen:

  • Mehrere Commits sollten ein Commit sein.

  • Ein Commit (nicht der aktuelle) sollte aus mehreren Commits bestehen.

  • Ein Commit (nicht der aktuelle) enthielt einen Fehler oder seine Nachricht.

  • Ein Commit (nicht der aktuelle) sollte entfernt werden.

  • Commits sollten neu geordnet werden (z. B. um logischer zu fließen).

Es stimmt zwar, dass Sie mit diesen Dingen „Geschichte verlieren“, aber die Realität ist, dass Sie nur saubere Arbeit veröffentlichen möchten. Wenn etwas noch unveröffentlicht ist, ist es in Ordnung, es umzubasieren, um es so zu transformieren, wie Sie es möchten sollte haben begangen. Das bedeutet, dass die endgültige Version im öffentlichen Repository logisch und leicht zu verfolgen sein wird, ohne irgendwelche Schluckaufe zu bewahren, die ein Entwickler auf dem Weg hatte.

  • Und nebenbei möchte ich noch erwähnen: utcc.utoronto.ca/~cks/space/blog/tech/GitNewHistory: “gits Design bedeutet, dass man die Geschichte naturgemäß nicht umschreiben kann”

    – VonC

    20. Mai 2010 um 18:42 Uhr

  • @VonC: Wie immer zeigt mich deine Recherche zu früheren Fragen. Danke für die Links. Der Punkt mit dem „Umschreiben der Geschichte“ ist auch ein sehr guter. An alle anderen: Die Zusammenfassung ist, dass Sie nicht wirklich umschreiben, sondern einen neuen Verlauf erstellen und die Referenz aktualisieren, um darauf zu verweisen, anstatt auf den alten Verlauf. Es gibt hier auch viele Fragen zu solchen Dingen – zurückgehen, um die Geschichte zu finden, die Sie durch Umbasieren / Ändern “verloren” haben.

    – Kaskabel

    20. Mai 2010 um 18:50 Uhr

  • “Sie erstellen eine neue Historie und aktualisieren die Referenz, um darauf statt auf die alte Historie zu verweisen”: JA! Exakt. Mehr Leistung zum Reflog und git log -g 😉

    – VonC

    20. Mai 2010 um 19:00 Uhr

Rebasing ermöglicht es Ihnen, Zusammenführungen in der richtigen Reihenfolge aufzunehmen. Die Theorie hinter dem Zusammenführen bedeutet, dass Sie sich darüber keine Sorgen machen müssen. Die Lösung komplizierter Konflikte wird einfacher, wenn Sie eine neue Basis erstellen und dann neue Änderungen der Reihe nach zusammenführen.

Vielleicht möchten Sie nachlesen Hasenhüpfen

  • Meiner Erfahrung nach stimmt das nicht. Es kann später einfacher sein, zusammenzuführen, wenn Sie Rebase verwenden, aber es ist ein Albtraum jetzt da mehrere Konflikte in einem einzigen Rebase auftreten. Oft aus derselben Datei. Die Umstellung auf direktes Zusammenführen hat es sowohl kurz- als auch langfristig für alle viel einfacher gemacht.

    – Jo

    12. Oktober 2011 um 15:09 Uhr


  • Bei einem Rebase entstehen keine Konflikte, weil Sie widersprüchliche Commits nicht rebasen.

    – JamesRyan

    2. November 2011 um 11:45 Uhr

1145320cookie-checkWelche Vorteile hat ein Rebase gegenüber einem Merge in Git?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy