Heim  >  Artikel  >  Entwicklungswerkzeuge  >  Was bedeutet Git-Rebase?

Was bedeutet Git-Rebase?

青灯夜游
青灯夜游Original
2021-12-29 17:04:3611486Durchsuche

Git-Rebase bedeutet: Neudefinition des Repository-Status des Zweigs. Bei der Durchführung eines Rebase-Vorgangs extrahiert Git die Änderungen am neu zu basierenden Zweig, beginnend mit dem gemeinsamen Vorfahren der beiden Zweige, und verweist dann auf den Zweig, auf den neu erstellt werden soll Der Basiszweig Der letzte Commit, und schließlich werden die gerade extrahierten Änderungen auf die Rückseite des letzten Commits des Basiszweigs angewendet.

Was bedeutet Git-Rebase?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Git-Version 2.30.0, Dell G3-Computer.

Git Rebase dient, wie der Name schon sagt, dazu, die Rolle des Startpunkts (Basis) neu zu definieren, dh den Repository-Status des Zweigs neu zu definieren.

1. Übermittlungsknotendiagramm

Lassen Sie uns zunächst anhand eines einfachen Übermittlungsknotendiagramms spüren, was Rebase bewirkt.

Zwei Zweige, Master und Feature, wobei Feature der vom Master am Übermittlungspunkt B gezogene Zweig ist.

Es gibt zwei Zweige auf Master Ein neues Commit M und zwei neue Commits C und D auf Feature

Was bedeutet Git-Rebase?
Wechseln Sie zu diesem Zeitpunkt zum Feature-Zweig und führen Sie den folgenden Befehl aus, der dem Zusammenführen des Master-Zweigs mit dem Feature-Zweig entspricht

git checkout feature
git rebase master

//这两条命令等价于git rebase master feature

Das Bild unten zeigt die Rebase. Das endgültige Übermittlungsknotendiagramm erklärt, wie es funktioniert:

Was bedeutet Git-Rebase?

  • Feature: zu ändernder Basiszweig, aktueller Zweig
  • master: Basiszweig, Zielzweig

Offizielle Erklärung: Bei der Ausführung Bei einer Rebase-Operation extrahiert git ausgehend vom gemeinsamen Vorfahren der beiden Zweige die Änderungen am zu ändernden Zweig, zeigt dann den zu ändernden Zweig auf das neueste Commit des Basiszweigs und wendet schließlich die gerade extrahierten Änderungen an die Rückseite des letzten Commits des Basiszweigs.

Erläuterung mit Beispielen: Wenn Git Rebase Master auf dem Feature-Zweig ausgeführt wird, extrahiert Git die Änderungen auf dem Feature-Zweig, beginnend mit dem gemeinsamen Vorfahren B von Master und Ffeatuer, d. h. die beiden Commits C und D werden zuerst extrahiert. Dann verweisen Sie den Feature-Zweig auf den neuesten Commit des Master-Zweigs, nämlich M. Schließlich werden die extrahierten C und D mit M verbunden, aber dieser Prozess besteht darin, die ursprünglichen C und D zu löschen und neue C‘ und D‘ zu generieren. Ihr Übermittlungsinhalt ist derselbe, aber die Commit-ID ist unterschiedlich. Natürlich deutet Feature schließlich auf D‘ hin.

Beliebte Erklärung (wichtig!): Rebase kann direkt als Änderung der Basis verstanden werden. Der Feature-Zweig ist ein Zweig, der aus B des Master-Zweigs gezogen wird, und die Basis des Features ist B. Und wenn der Master nach B einen neuen Commit hat, ist dies gleichbedeutend mit der Verwendung des neuen Commits auf dem Master als neue Basis des Feature-Branchs. Der eigentliche Vorgang besteht darin, die Übermittlungen der Funktion nach B zu speichern, dann die ursprünglichen Übermittlungen zu löschen, dann den neuesten Übermittlungsort des Masters zu finden und dann die gespeicherten Übermittlungen zu verbinden (neuer Knoten mit neuer Festschreibungs-ID), sodass die Basis von Der Feature-Zweig ist ziemlich Yu wurde M anstelle des ursprünglichen B.

Es gibt auch eine sehr einfache Erklärung. Der Schlüssel zum Rebase-Befehl besteht darin, den Unterschied zwischen dem Basiszweig und dem aktuellen Zweig (nach dem Bifurkationspunkt) zu ermitteln ). Senden Sie dann die differenziellen Übermittlungen nacheinander nach dem letzten Übermittlungspunkt des „Basiszweigs“ erneut und zeigen Sie schließlich den HEAD-Zeiger des aktuellen Zweigs auf den neuesten Übermittlungspunkt


2. Tatsächliches Git-Übermittlungsbeispiel

Die Übermittlung Der Datensatz wird gemäß dem obigen Diagramm wie folgt erstellt. Wie in der Abbildung gezeigt: (ABM ist die Master-Zweiglinie und ABCD ist die Feature-Zweiglinie. Hier ändert der Master seine Farbe und verzweigt sich. Dies hat keinen Einfluss auf das Verständnis. Nur wissen Sie, dass es zwei Zweige und zwei Zeilen bedeutet!)

Was bedeutet Git-Rebase?
Dies Wenn Sie Git Rebase Master auf dem Feature-Zweig ausführen

Nach Abschluss der Rebase ist ABCD die ursprüngliche Feature-Zweiglinie und ABMC'D' der neue Feature-Zweig Leitung und ABM ist die Hauptzweigleitung (keine Änderung)

Was bedeutet Git-Rebase?


3. Empfohlene Nutzungsszenarien

Es gibt so viele Dinge zu tun, aber das ist eigentlich das Wichtigste. Unterschiedliche Unternehmen und unterschiedliche Situationen haben unterschiedliche Nutzungsszenarien, aber in den meisten Fällen lauten die Empfehlungen wie folgt:

  • Verwenden Sie Rebase, wenn Sie den neuesten Code aus dem öffentlichen Zweig abrufen, also git pull -r oder git pull --rebase. Aber es gibt einen Nachteil, den rebase Von nun an weiß ich nicht mehr, aus welchem ​​Zweig mein aktueller Zweig zuerst gezogen wurde, da sich die Basis geändert hat. (Wenn Sie Merge verwenden, gibt es einen bedeutungslosen Commit-Datensatz „Merge... to...“)

  • Wenn Sie Code in einem öffentlichen Zweig zusammenführen, verwenden Sie Merge. (Wenn Sie Rebase verwenden und andere Entwickler den Verlauf des Hauptzweigs sehen möchten, ist dies nicht der ursprüngliche Verlauf. Der Verlauf wurde von Ihnen manipuliert.)

Empfohlenes Lernen: „Git Tutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet Git-Rebase?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was bedeutet GUI in Git?Nächster Artikel:Was bedeutet GUI in Git?