Grundlegendes zum Git-Verlauf

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Git speichert den Verlauf als Diagramm von Momentaufnahmen , die als Commits bezeichnet werden, des gesamten Repositorys. Jeder Commit enthält auch einen Zeiger auf einen oder mehrere vorherige Commits. Commits können mehrere Übergeordnete haben, indem sie einen Verlauf erstellen, der wie ein Diagramm anstelle einer geraden Linie aussieht. Dieser Unterschied in der Geschichte ist unglaublich wichtig und ist der Hauptgrund, warum Benutzer Git verwirrend finden.

Hinweis

Wenn Sie keine Änderung in Ihrem Git-Verlauf finden können, den Sie gemacht haben, erfahren Sie mehr darüber, wie die Vereinfachung des Git-Verlaufs bei Git meine Änderungen verloren hat: Sehen Sie sich die Vereinfachung der Geschichte von Git an.

Grundlagen des Commitverlaufs

Beginnen Sie mit einem einfachen Verlaufsbeispiel: ein Repo mit 3 linearen Commits.

three commits in a line

Commit A ist das übergeordnete Element von Commit B, und commit B ist das übergeordnete Commit von C. Diese Geschichte sieht einem CVCS sehr ähnlich aus. Der Pfeil, der auf den Commit C zeigt, ist eine Verzweigung. Der Name ist benannt main , da dies der Standardname für die Hauptlinienverzweigung in einem Git-Repo ist. Verzweigungen sind Zeiger auf bestimmte Commits, weshalb Verzweigungen so einfach und einfach in Git sind.

Ein wichtiger Unterschied bei Git im Vergleich zu CVCS besteht darin, dass ich meine eigene vollständige Kopie des Repo habe. Ich muss mein lokales Repository mit dem Remote-Repository synchronisieren, indem ich die neuesten Commits aus dem Remote-Repository erhalte. Dazu wird der Hauptzweig mit dem folgenden Befehl gezogen:

git pull origin main

Diese kopien ("pulls") alle Commits aus der main Verzweigung des Remote-Repo (standardmäßig aufgerufen origin ) an die main Verzweigung des lokalen Repositorys. Der Pullvorgang hat einen neuen Commit kopiert, und die main Verzweigung im lokalen Repo zeigt jetzt auf diesen neuen Commit.

a fourth commit, D, is added to the line

Grundlegendes zum Verzweigungsverlauf

Jetzt möchte ich eine Änderung an meinem Code vornehmen. Es ist üblich, mehrere aktive Verzweigungen zu haben, in denen Sie parallel an verschiedenen Features arbeiten. Dies unterscheidet sich stark von CVCS, wo neue Filialen schwer und selten erstellt werden. Der erste Schritt besteht darin, das Auschecken in eine neue Verzweigung mit dem folgenden Befehl auszuführen:

git checkout -b cool-new-feature

Dies ist eine Verknüpfung, die zwei Befehle kombiniert: git branch cool-new-feature um die Verzweigung zu erstellen, gefolgt von git checkout cool-new-feature der Arbeit in der Verzweigung.

Branch cool-new-feature is added

Zwei Verzweigungen zeigen nun auf denselben Commit. Ich werde einige Änderungen an der cool-new-feature Verzweigung in zwei neuen Commits vornehmen, E und F.

added two new commits

Meine Commits sind von der cool-new-feature Verzweigung erreichbar, da ich sie in dieser Verzweigung gemacht habe. Ich bin mit meinem Feature fertig und möchte es zusammenführen in main. Dazu verwende ich den folgenden Befehl:

git merge cool-feature main

after the merge

Die Diagrammstruktur des Verlaufs wird sichtbar, wenn ein Zusammenführen vorhanden ist. Git erstellt einen neuen Commit, wenn ich meine Verzweigung in eine andere Verzweigung zusammengeführt habe. Dies ist ein Zusammenführungs commit. In diesem Zusammenführungs-Commit sind keine Änderungen enthalten, da keine Konflikte aufgetreten sind. Wenn ich Konflikte hatte, würde der Zusammenführungs-Commit die erforderlichen Änderungen enthalten, um diese Konflikte zu beheben.

Geschichte in der realen Welt

Hier ist ein Beispiel für den Git-Verlauf, der code in der aktiven Entwicklung in einem Team genauer ähnelt. Es gibt drei Personen, die Zusammenführung von eigenen Zweigen in den Hauptzweig um die gleiche Zeit ausführen.

console log of git graph

Nachdem Sie nun verstehen, wie Verzweigungen und Zusammenführungen die Form des Diagramms erstellen, sollte dies nicht zu beängstigend sein!