Freigeben über


Grundlegendes zum Git-Verlauf

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

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 Eltern haben und eine Historie bilden, die eher einem Graphen als einer geraden Linie gleicht. Dieser Unterschied in der Geschichte ist unglaublich wichtig und der Hauptgrund, warum Benutzer Git verwirrend finden.

Hinweis

Wenn Sie in Ihrem Git-Verlauf keine Änderung finden können, von der Sie wissen, dass Sie sie gemacht haben, erfahren Sie mehr darüber, wie die Vereinfachung des Git-Verlaufs funktioniert, indem Sie sich Git hat meine Änderungen verloren: Ein Blick auf die Vereinfachung der Git-Historie ansehen.

Grundlagen des Commitverlaufs

Beginnen Sie mit einem einfachen Verlaufsbeispiel: einem Repository mit 3 linearen Commits.

Drei Commits in einer Zeile

Commit A ist das übergeordnete Element von Commit B, und commit B ist das übergeordnete Element von Commit C. Diese Geschichte ähnelt einem CVCS. Der Pfeil, der auf C zeigt, ist eine Verzweigung. Der Name main lautet, da dies der Standardname für den Hauptzweig in einem Git-Repository ist. Verzweigungen sind Zeiger auf bestimmte Commits, weshalb Verzweigungen in Git so leicht und einfach sind.

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

git pull origin main

Dieser Vorgang ("Pulls") überträgt alle Commits aus dem main Branch des Remote-Repositories (standardmäßig origin genannt) in den main Branch des lokalen Repositories. Der Pullvorgang hat einen neuen Commit kopiert, und der main Branch im lokalen Repository verweist nun auf diesen neuen Commit.

ein vierter Commit, D, wird der Zeile hinzugefügt.

Verzweigungshistorie verstehen

Jetzt möchte ich meinem Code eine Änderung vornehmen. Es ist üblich, mehrere aktive Branches zu haben, in denen Sie gleichzeitig an verschiedenen Features arbeiten. Dies steht in starkem Gegensatz zu CVCS, wo neue Zweige aufwendig sind und selten erstellt werden. Der erste Schritt besteht darin, mit dem folgenden Befehl auf einen neuen Branch zu wechseln:

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 und mit git checkout cool-new-feature um in der Verzweigung zu arbeiten zu beginnen.

Der Branch

Zwei Verzweigungen zeigen nun auf denselben Commit. Ich werde einige Änderungen am cool-new-feature Branch in zwei neuen Commits durchführen, E und F.

Zwei neue Commits hinzugefügt

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

git merge cool-feature main

nach dem Zusammenführen

Die Graphenstruktur der Historie wird sichtbar, wenn eine Zusammenführung erfolgt. Git erstellt einen neuen Commit, wenn ich meinen Branch in einen anderen Branch zusammenführe. 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 lösen.

Geschichte in der realen Welt

Nachfolgend sehen Sie ein Beispiel für den Git-Verlauf, der dem Code in der aktiven Entwicklung in einem Team ähnelt. Es gibt drei Personen, die Zusammenführungen von ihren eigenen Filialen in die Hauptzweige um die gleiche Zeit ausführen.

Konsolenprotokoll von Git Graph

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