Wie funktioniert Git Reset?

Willst du wissen wie das Git ist zurücksetzen Option funktioniert?

In einer Reihe von Git-Kursen zu Envato Tuts + habe ich einige grundlegende Konzepte von Git in einfachen Videos durchgearbeitet.

In diesem Video aus der Serie erfahren Sie alles über Git-Reset. Sie werden sehen, wie Sie jede Art von Reset verwenden und wie diese Varianten mit den drei Git-Bäumen interagieren:

  • weich: ändert nur HEAD, ändert jedoch keine bereitgestellten Dateien in Index- oder Arbeitsdateien.
  • gemischt: verschiebt HEAD und aktualisiert den Index mit dem Inhalt der Revision, auf die HEAD jetzt zeigt.
  • schwer: verschiebt HEAD und aktualisiert den Index und das Arbeitsverzeichnis. Dies ist die einzige Version von reset, die zu Datenverlust führen kann.

Ich werde dir auch zeigen, wie man es benutzt git reset auf einzelne Dateien.

Git Basics: Zurücksetzen

 

Wie funktioniert Git Reset?

Git zurücksetzen. Was tut es? Auf diese Weise machen Sie einige Änderungen rückgängig, die auf Ihrem Computer lokal sind. Wenn Sie einige Arbeit erledigt haben, die Sie zurückspulen müssen, ist das Zurücksetzen Ihr Freund. Sie können einfach von vorne beginnen. Sie können zwischen den Inhalten verschiedener Commits hin und her springen und ein wenig Zeitreise unternehmen.

Mit git reset stehen Ihnen einige Optionen zur Verfügung. Sie können hart, weich und gemischt vorgehen, und Sie können Commit-Objekte auch auf einer einzelnen Dateiebene ausführen und halten oder ausführen. 

Jede dieser drei Varianten wirkt sich auf bestimmte Bäume aus, mit denen git Ihre Dateien und deren Inhalt behandelt.

Wie Git Reset die drei Bäume beeinflusst

Bildlich gesprochen verändert jede Reset-Option einen anderen Baum, einen anderen Teil der Speicherung von Snapshots durch git. 

Bäume, worüber reden wir hier? Git verwendet das Arbeitsverzeichnis, den Index (auch als Bereitstellungsbereich bezeichnet) und etwas, das als HEAD bezeichnet wird, um Commits zu erstellen und abzurufen. 

Im Arbeitsverzeichnis können Sie Dateien ändern, die Sie im Index bereitstellen können. In diesem Bereitstellungsbereich können Sie die Feinabstimmung vornehmen und auswählen, was Sie beim nächsten Commit festlegen möchten. Ein Commit-Objekt ist eine kryptografisch gehashte Version Ihres Inhalts. Es hat einige Metadaten hinzugefügt und weist auf frühere Commits hin, wodurch wir unsere Zeitreisebits erledigen können. 

HEAD ist eine Referenz, die auf solche Commit-Objekte verweist. Es handelt sich lediglich um einen Zeiger, der bei jedem neuen Commit oder einer Änderung der Verzweigung aktualisiert wird. Sie können es verschieben und mit dem Commit-Objekt einen beliebigen Zeitpunkt anvisieren. 

Weitere Informationen zu Bäumen und ähnlichem finden Sie in meinem Video zu den drei Bäumen und Git. Es deckt den grundlegenden Workflow in Git ab und ist eine solide Basis, um die Logik der Verwendung von git reset besser zu verstehen.

Die verschiedenen Reset-Optionen werden erläutert

Schauen wir uns nun die verschiedenen Optionen an.

Git zurücksetzen - hard

Das geht die ganzen neun Meter. Es wird zuerst HEAD verschoben und der Index mit dem Inhalt des Commits aktualisiert, auf den HEAD jetzt zeigt. Dann wird das Arbeitsverzeichnis mit dem Inhalt des Index aktualisiert, wodurch möglicherweise im Arbeitsverzeichnis geänderter Inhalt zerstört wird.

Daher ist es die einzige Version von git reset, die ein bisschen gefährlich ist, wenn Sie nicht wissen, was Sie tun. 

Git Reset - gemischt

Dadurch wird HEAD verschoben und auch der Index mit dem Inhalt des gewünschten Commits aktualisiert, auf das HEAD nicht zeigt. Das Arbeitsverzeichnis ist von dieser Operation nicht betroffen.

Die gemischte Option ist die Standardeinstellung, wenn Sie git reset nicht mit einer Option angeben. Es arbeitet immer verzeichnissicher, sodass Sie keine Angst haben müssen, Ihre Arbeit zu verlieren. 

Git zurücksetzen --- weich

Diese Option bewegt nur HEAD und stoppt genau dort. In der Tat macht dies den letzten git commit-Befehl rückgängig.

Das Arbeitsverzeichnis und die Dateien, die möglicherweise bereitgestellt werden, sind von dieser Operation noch nicht betroffen. 

Einen Dateipfad verwenden

Mit all diesen Optionen für git reset können Sie git genau sagen, wo die Wiedergabe gestoppt werden soll, indem Sie den Inhalt und die Dateien aus den vorherigen Commits zurückspulen, um die Bäume anzugeben, die Sie beeinflussen möchten. Wir können dies noch einen Schritt weiter gehen und das Programm mit einem Dateipfad zurücksetzen.

Wenn Sie einen Pfad verwenden, bewegt Git HEAD nicht. Warum? Weil HEAD auf ein Commit-Objekt verweist und nicht nur auf eine Teilmenge davon verweisen kann. Mit anderen Worten, HEAD verweist nicht auf bestimmte Dateien, sondern auf das Festschreiben von Objekten, die aus Blockdateien und einigen Metadaten bestehen. Das Index- und Arbeitsverzeichnis kann dagegen in Scheiben sortiert werden.

Nur der Index und das Arbeitsverzeichnis spielen eine Rolle, wenn Sie einen Pfad verwenden. Es kopiert einfach den Inhalt einer Datei in den Index und kann nicht viel anderes tun. git reset some-file.ext zurück geht davon aus, dass Sie standardmäßig gemeint haben git reset --mixed HEAD some-file.ext und wirkt sich nicht auf das Arbeitsverzeichnis aus.

Da HEAD sich nicht bewegen kann, wäre die Soft-Option übrigens sinnlos. Angenommen, Sie haben an Version 3 einer Datei gearbeitet und diese für den nächsten Kommentar zum Index hinzugefügt. Jetzt möchten Sie diese Änderungen aufheben. Lauf git reset some-file.ext zurück diese bestimmte Datei zu entpacken.

Infolgedessen wird der Index mit dem Status Ihrer Datei von Version 2 gefüllt, der Version Ihrer letzten Commit-Anweisung, auf die der HEAD-Befehl zeigt. Die Änderungen, die Sie in Ihrer Datei (Version 3) vorgenommen haben, sind weiterhin im Arbeitsverzeichnis verfügbar. Sie können diese Änderungen an Stufe 3 dieser Datei immer noch vornehmen.

Also, was macht man eigentlich mit git reset some-file.ext zurück manipulieren Sie nur den Index. 

Zurücksetzen gegen Kasse

Wie wäre es mit git reset --harte einige-Datei.ext? Warum können wir das nicht auch benutzen?? 

Diese Funktionalität wird durch erreicht git checkout mit einem Dateinamen. git checkout some-file.ext ist eigentlich was git reset --harte einige-Datei.ext würde tun, aber Git lässt uns die harte Option nicht verwenden.

Lassen Sie uns noch einen Schritt weiter gehen. Wir können ein beliebiges Commit anvisieren, um eine bestimmte Datei zurückzusetzen, nicht nur die zuletzt durch HEAD dargestellte. Dadurch werden die Zieldateien im Index auf den Status eines bestimmten Commits zurückgesetzt, ohne dass dies Auswirkungen auf das Arbeitsverzeichnis oder ein Commit hat.

Nachdem Sie den Index auf den Status eines bestimmten Commits zurückgesetzt haben, können Sie eine Art Rückwärts-Sortierung verwenden git checkout mit einem Dateinamen, um den Inhalt des Index in Ihr Arbeitsverzeichnis auszuchecken. 

Warum die Kasse benutzen? weil git reset --hard Mit einer Datei ist Git nichts.

Aber sei vorsichtig. Verwenden git checkout Mit einem Dateipfad werden Ihre neuesten Änderungen in Ihrem Arbeitsverzeichnis gelöscht und durch die Version der Datei in diesem bestimmten Commit ersetzt.

Weitere Git-Kurse ansehen

Wenn Sie dies als hilfreich empfunden haben, sollten Sie sich weitere Git-Kurse anschauen?

Sie können unsere Einführung in Git und GitHub ansehen oder die anderen Coffee Break-Kurse in dieser Serie ausprobieren:

  • Git Basics: Die drei Bäume
  • Git-Grundlagen: GitHub Pull Requests
  • Git Basics: Niederlassungen
  • Git Basics: Staaten
  • Git-Grundlagen: Merge und Rebase