Die einfache Merge-Fähigkeit von git ist eine seiner Stärken. Während einer Zusammenführung verwendet git Fast-Forward-Zusammenführung, wenn es feststellt, dass der HEAD des aktuellen Zweigs ein Vorfahre des Commits ist, das Sie zusammenführen möchten. Bei einem Fast-Forward-Merge gibt es keinen neuen Commit. Git bewegt nur den Zeiger. Wenn dieses Verhalten nicht erwünscht ist, können Sie mit dem Flag no-ff einen neuen Commit für die Zusammenführung erstellen.
So sieht Merge mit und ohne Fast-Forward aus
Nach einem schnellen Vorlauf sieht Ihr Git-Verlauf so aus:
C0 —> C1 —> C2—> C3
Für die gleiche Anzahl von Commits hier ein Merge-Verlauf ohne Fast-Forward:
Im ersten Fall gibt es keinen Hinweis auf eine Verzweigung. Im zweiten Fall zeigt der Verlauf einen C4-Commit an, um anzuzeigen, wo die Zusammenführung stattgefunden hat.
Durch ein Beispiel gehen
Sie erstellen ein Git-Repository, erstellen einen Branch und versuchen dann die Zusammenführungen mit und ohne Fast-Forward.
Abschnitt 1: Einrichtung
Zuerst können Sie das Git-Repository mit den folgenden Schritten erstellen:
$ mkdir mein_projekt$ cd mein_projekt
$ git init
$ berühren Sie a.txt
$ git add -A
$ git commit -m 'C0: Hinzufügen einer TXT-Datei'
Lassen Sie uns nun einen Branch namens features erstellen und einige Änderungen vornehmen:
$ git branch-Funktionen$ git Checkout-Funktionen
$ berühren b.txt
$ git add -A
$ git commit -m 'C1: b.txt hinzufügen'
$ Berühren Sie c.txt
$ git add -A
$ git commit -m 'C2: c.txt hinzufügen'
$ touch d.txt
$ git add -A
$ git commit -m 'C3: d.txt hinzufügen'
Abschnitt 2: Zusammenführen mit Schnellvorlauf
Kehren wir zum Master-Branch zurück und führen den Features-Branch darin zusammen:
$git KasseMeister$git zusammenführenMerkmale
Ausgabe:
Aktualisieren 08076fb..9ee88ebSchneller Vorlauf
b.txt | 0
c.txt | 0
d.txt | 0
3 Dateien geändert, 0 Einfügungen (+), 0 Löschungen (-)
Modus erstellen 100644 b.txt
Erstellungsmodus 100644 c.txt
Erstellungsmodus 100644 d.txt
Wenn Sie den Verlauf überprüfen, sehen Sie:
$ git log --oneline9ee88eb C3: d.txt hinzufügen
c72b92c C2: c.txt hinzufügen
2e4039e C1: b.txt hinzufügen
08076fb C0: Hinzufügen einer.txt
Alle Commits aus dem Features-Zweig befinden sich jetzt also im Master-Zweig. Wenn Sie weiterhin Änderungen am Master vornehmen, können Sie nicht feststellen, wann der Feature-Branch darin zusammengeführt wurde.
Abschnitt 3: Ohne Schnellvorlauf
Wiederholen Sie Abschnitt 1 für einen neuen Ordner.
Versuchen Sie dann eine Zusammenführung ohne Schnellvorlauf:
$git KasseMeister$git zusammenführen --no-ffBesonderheit
Es öffnet sich Folgendes im Standard-Texteditor Ihres Git:
Filiale zusammenführen'Merkmale'# Bitte geben Sie eine Commit-Nachricht ein, um zu erklären, warum diese Zusammenführung notwendig ist.
# vor allem, wenn es einen aktualisierten Upstream in einen Topic-Branch einfügt.
#
# Zeilen, die mit '#' beginnen, werden ignoriert und eine leere Nachricht wird abgebrochen
# das Commit.
Ändern Sie die Kommentare. In diesem Fall können Sie einfach C4: vor 'Features' des Merge-Zweigs hinzufügen. Die Ausgabe sollte so aussehen:
Zusammenführung durch die 'rekursive' Strategie.b.txt | 0
c.txt | 0
d.txt | 0
3 Dateien geändert, 0 Einfügungen (+), 0 Löschungen (-)
Modus erstellen 100644 b.txt
Erstellungsmodus 100644 c.txt
Erstellungsmodus 100644 d.txt
Wenn Sie nun den Verlauf überprüfen, sollte dieser wie folgt aussehen:
$ git log --onelinee071527 C4: Zweig-'Features' zusammenführen
bb79c25 C3: d.txt hinzufügen
692bd8c C2: c.txt hinzufügen
a0df62a C1: b.txt hinzufügen
7575971 C0: Hinzufügen einer.txt
Sie können sehen, dass diese Merge-Version, obwohl Sie genau die gleichen Änderungen haben, den zusätzlichen C4-Commit hat, der das Zusammenführen von Features-Zweig in Master bedeutet.
Abschluss
Das Flag git merge no-ff hilft dabei, einen lesbareren Verlauf zu erstellen. Es ermöglicht Ihnen, Tags zu platzieren, die deutlich zeigen, wo die Zusammenführungen stattgefunden haben. Es kann Ihnen beim Debuggen Zeit und Mühe sparen.