Unterschied zwischen den Git-Befehlen `Reset`, `Revert` und `Checkout`.

John Wachira 15 Februar 2024
  1. Unterschied zwischen den Befehlen Git Reset, Git Revert und Git Checkout
  2. Git Reset vs. Git Revert vs. Git Checkout
  3. Operationen auf Commit-Ebene
  4. Operationen auf Dateiebene
Unterschied zwischen den Git-Befehlen `Reset`, `Revert` und `Checkout`.

Dieser Artikel beschreibt den Unterschied zwischen den Befehlen git reset, git revert und git checkout. Dies sind einige der nützlichsten Git-Dienstprogramme, mit denen wir einige Änderungen in unseren Repositories rückgängig machen können.

Es ist leicht, die Befehle zu verwechseln, aber am Ende dieses Artikels werden Sie das Vertrauen gewonnen haben, Ihr Repository mit den oben genannten Befehlen zu verwenden und darin zu navigieren.

Unterschied zwischen den Befehlen Git Reset, Git Revert und Git Checkout

Diese Befehle sind leichter zu verstehen, wenn wir uns über die Auswirkungen jedes Befehls auf die drei Hauptkomponenten eines Git-Repositorys im Klaren sind.

  1. Das Arbeitsverzeichnis
  2. Inszenierter Schnappschuss
  3. Commit-Verlauf

Wir können die obigen Komponenten auch die Drei Bäume nennen.

Git-Checkout

Was meinen wir mit Auschecken?

Diese Operation verschiebt den HEAD-Zeiger zu einem bestimmten Commit.

git checkout

Das obige Bild zeigt eine Abfolge von Commits in einem Git-Repository. Die Zweigzeiger HEAD und main befinden sich derzeit auf dem Commit d.

Wir können unsere HEAD-Referenz mit dem git checkout-Befehl zu jedem Commit verschieben.

Um beispielsweise unsere HEAD-Referenz zum Commit b zu verschieben, führen wir Folgendes aus:

$ git checkout -b

Wir können den Befehl git checkout auf Commit- und Dateiebene verwenden. Beim Auschecken auf Dateiebene wird der Inhalt der Datei mit dem Inhalt des angegebenen Commits aktualisiert.

Git-Revert

Beim Zurücksetzen nehmen wir einen bestimmten Commit und erstellen einen neuen, der den Effekt des angegebenen Commit umkehrt. Der Commit git revert wirkt nur auf Commit-Ebene und hat keine Funktionalität auf Dateiebene.

Git-Reset

Beim Zurücksetzen nehmen wir ein bestimmtes Commit, setzen die Drei Bäume zurück und aktualisieren ein Repository, damit es mit dem Status des Repos beim angegebenen Commit übereinstimmt. Wir können auf drei verschiedene Modi zurücksetzen, die den drei Bäumen entsprechen.

Normalerweise verwenden wir den git reset und den git checkout, um lokale oder private Änderungen rückgängig zu machen. Beide ändern den Verlauf eines Repositorys und können zu Konflikten führen, wenn sie auf entfernte öffentliche oder freigegebene Repositorys übertragen werden.

Git Reset vs. Git Revert vs. Git Checkout

Die folgende Tabelle enthält einige häufige Anwendungsfälle für die drei Befehle.

Befehl Umfang Häufige Anwendungsfälle
git zurücksetzen Commit-Level Commits in einem Branch lokal löschen oder nicht festgeschriebene Änderungen verwerfen.
git zurücksetzen Dateiebene Staging einer Datei aus dem Index entfernen.
git Kasse Commit-Level Untersuchen Sie alte Commits und wechseln Sie zwischen Branches.
git Kasse Dateiebene Änderungen im Arbeitsverzeichnis verwerfen.
git zurücksetzen Commit-Level Kehrt die Auswirkungen eines Commits in öffentlichen Zweigen um.
git zurücksetzen Dateiebene (N / A)

Operationen auf Commit-Ebene

Wir übergeben Parameter an die Befehle git reset und git checkout, um verschiedene Betriebsebenen aufzurufen. Wenn wir keinen Dateiparameter einschließen, wirken sich die Befehle auf den Commit als Ganzes aus.

Setzen Sie ein Commit zurück

Das Zurücksetzen auf der Commit-Ebene verschiebt die HEAD-Referenz zu einem bestimmten Commit. Wir können diesen Befehl verwenden, um Commits aus einem Branch zu löschen.

Hier ist ein Beispiel.

$ git reset HEAD~3

Der obige Befehl bewegt die Spitze unseres Zweigs um drei Commits nach hinten. Wir können sie als hängende oder verwaiste Commits bezeichnen.

Wir haben die drei Commits verworfen. Es ist am besten, den Befehl zu verwenden, um Commits zu beseitigen, die wir nicht in einem entfernten gemeinsam genutzten Repository veröffentlicht haben.

Wir können auch den Befehl git reset verwenden, um den bereitgestellten Snapshot und das Arbeitsverzeichnis zu ändern, indem wir eines der folgenden Flags übergeben.

  1. --soft – Ändert die gestuften Änderungen oder das Arbeitsverzeichnis nicht.
  2. --mixed – Beeinflusst nicht das Arbeitsverzeichnis, ändert aber den bereitgestellten Snapshot, damit er mit dem angegebenen Commit übereinstimmt.
  3. --hard – Ändert sowohl das Arbeitsverzeichnis als auch den bereitgestellten Snapshot, um mit dem angegebenen Commit übereinzustimmen.

Alte Commits auschecken

Wir können den Befehl git checkout verwenden, um den Zustand eines Repositorys bei einem bestimmten Commit zu überprüfen. Wir können auch Zweignamen übergeben, um zwischen Zweigen zu wechseln.

Hier ist ein Beispiel.

$ git checkout feature

Der obige Befehl wechselt zum feature-Zweig. Es bewegt keine Äste.

Wir können auch beliebige Commits untersuchen, indem wir anstelle eines Branch-Namens einen Commit-Hash oder eine Referenz übergeben. Hier ist ein Beispiel.

$ git checkout HEAD~1

Der obige Befehl überprüft das übergeordnete Element unseres aktuellen Commits. Wenn Sie HEAD~2 passieren, wird der Großelternteil überprüft.

Der obige Befehl schaltet uns in den getrennten HEAD-Modus, da unser aktueller HEAD keine Zweigreferenz hat.

Alle Änderungen und Commits, die im getrennten HEAD-Modus durchgeführt werden, sind nicht mehr erreichbar, sobald Sie zu einem anderen Zweig wechseln. Erstellen Sie immer einen neuen Zweig, wenn Sie Änderungen im getrennten HEAD-Zustand festschreiben möchten.

Gemeinsame Commits zurücksetzen

Wenn wir Commits rückgängig machen, erstellen wir ein neues Commit, das die Auswirkungen des angegebenen Commits umkehrt. Auf diese Weise vermeiden wir das Neuschreiben des Commit-Verlaufs gemeinsam genutzter Repositories.

Wenn wir beispielsweise den letzten Commit rückgängig machen wollen, führen wir Folgendes aus:

$ git revert HEAD

Operationen auf Dateiebene

Die Befehle git checkout und git reset akzeptieren einen Dateipfad als optionalen Parameter. Die Auswirkungen der Befehle sind auf eine einzelne Datei beschränkt.

Zurücksetzen einer Datei

Wir können den bereitgestellten Snapshot einer Datei aktualisieren, damit er mit der Version des angegebenen Commits übereinstimmt, wie unten gezeigt.

$ git reset HEAD~1 README.md

Der obige Befehl ruft die Version der Datei README.md im übergeordneten Commit des aktuellen Commit ab und fügt sie dem Index für den nächsten Commit hinzu. Wir können git reset HEAD README.md ausführen, um die README.md-Datei aus der Staging-Umgebung zu entfernen.

Git Checkout-Datei

Das Übergeben eines Dateipfads an den Befehl git checkout aktualisiert das Arbeitsverzeichnis und nicht den bereitgestellten Snapshot. Dadurch wird der HEAD-Zeiger nicht zwischen Zweigen bewegt.

Hier ist ein Beispiel.

$ git checkout HEAD~1 README.md

Dadurch wird die Version der Datei README.md aus dem übergeordneten Commit unseres aktuellen Commits abgerufen und die Datei README.md nur in unserem Arbeitsverzeichnis aktualisiert. Es bedeutet einfach, dass wir zur Dateiversion im alten Commit zurückgekehrt sind.

Im Gegensatz zum Befehl git revert, der die durch den angegebenen Commit eingeführten Änderungen rückgängig macht, verwirft dieser alle nachfolgenden Änderungen. Wir können es verwenden, um nicht bereitgestellte Änderungen an einer einzelnen Datei zu verwerfen, wie unten gezeigt.

$ git checkout HEAD README.md

Zusammenfassend lässt sich sagen, dass wir leicht zwischen den Befehlen git reset, git revert und git checkout unterscheiden können, indem wir die Auswirkungen jedes Befehls auf den Commit-Verlauf, den bereitgestellten Snapshot und das Arbeitsverzeichnis verstehen.

John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

Verwandter Artikel - Git Revert

Verwandter Artikel - Git Reset