377 Stimmen

Was ist der Unterschied zwischen Git Revert, Checkout und Reset?

Ich versuche zu lernen, wie man Dateien und Projekte in einem früheren Zustand wiederherstellt oder zurücksetzt, und verstehe nicht den Unterschied zwischen git revert , checkout et reset . Warum gibt es 3 verschiedene Befehle für scheinbar denselben Zweck, und wann sollte man den einen dem anderen vorziehen?

585voto

Dan Moulding Punkte 195982

Diese drei Befehle haben völlig unterschiedliche Ziele. Sie sind sich nicht einmal im Entferntesten ähnlich.

git revert

Dieser Befehl erzeugt einen neuen Commit, der die Änderungen eines vorherigen Commits rückgängig macht. Dieser Befehl fügt dem Projekt eine neue Historie hinzu (er ändert die bestehende Historie nicht).

git checkout

Dieser Befehl checkt Inhalte aus dem Repository aus und legt sie in Ihrem Arbeitsbaum ab. Er kann auch andere Auswirkungen haben, je nachdem, wie der Befehl aufgerufen wurde. Zum Beispiel kann er auch den Zweig ändern, an dem Sie gerade arbeiten. Dieser Befehl nimmt keine Änderungen an der Historie vor.

git reset

Dieser Befehl ist ein wenig komplizierter. Je nachdem, wie er aufgerufen wird, tut er verschiedene Dinge. Er ändert den Index (die so genannte "Staging Area"). Oder er ändert den Commit, auf den ein Branch Head gerade zeigt. Dieser Befehl kann die bestehende Historie ändern (indem er den Commit ändert, auf den ein Zweig verweist).

Mit diesen Befehlen

Wenn irgendwo in der Projekthistorie ein Commit gemacht wurde und Sie später feststellen, dass der Commit falsch ist und nicht hätte gemacht werden sollen, dann git revert ist das richtige Werkzeug für diese Aufgabe. Es macht die durch die fehlerhafte Übertragung eingeführten Änderungen rückgängig und speichert das "Undo" in der Historie.

Wenn Sie eine Datei in Ihrem Arbeitsbaum geändert haben, aber die Änderung nicht festgeschrieben haben, dann können Sie git checkout um eine frische Kopie der Datei aus dem Repository auszuchecken.

Wenn Sie einen Commit gemacht haben, ihn aber mit niemandem geteilt haben und Sie entscheiden, dass Sie ihn nicht wollen, dann können Sie git reset um die Historie so umzuschreiben, dass es so aussieht, als hätten Sie diesen Commit nie gemacht.

Dies sind nur einige der möglichen Einsatzszenarien. Es gibt noch weitere Befehle, die in bestimmten Situationen nützlich sein können, und die drei oben genannten Befehle haben auch noch andere Verwendungszwecke.

104voto

Akavall Punkte 75208

Nehmen wir an, Sie hätten Commits:

C
B
A

git revert B wird eine Übergabe erstellt, die Änderungen in B .

git revert A wird eine Übergabe erstellt, die die Änderungen in A aber nicht auf Änderungen in B

Beachten Sie, dass bei Änderungen in B sind abhängig von Veränderungen in A der Rückläufer von A ist nicht möglich.

git reset --soft A ändert den Übergabeverlauf und das Repository; das Bereitstellungs- und das Arbeitsverzeichnis sind weiterhin auf dem Stand von C .

git reset --mixed A ändert die Commit-Historie, das Repository und das Staging; das Arbeitsverzeichnis bleibt auf dem Stand von C .

git reset --hard A ändern Sie den Übergabeverlauf, das Repository, das Staging- und das Arbeitsverzeichnis; Sie kehren zum Zustand von A vollständig.

31voto

Jonathan Punkte 1103
  • git revert wird verwendet, um eine vorherige Übertragung rückgängig zu machen. In Git kann man einen früheren Commit nicht ändern oder löschen. (Eigentlich schon, aber das kann zu Problemen führen.) Anstatt also den früheren Commit zu bearbeiten, führt revert einen neuen Commit ein, der einen früheren rückgängig macht.
  • git reset wird verwendet, um Änderungen in Ihrem Arbeitsverzeichnis rückgängig zu machen, die noch nicht übertragen wurden.
  • git checkout wird verwendet, um eine Datei aus einer anderen Übergabe in Ihren aktuellen Arbeitsbaum zu kopieren. Dabei wird die Datei nicht automatisch übertragen.

25voto

dan_waterworth Punkte 6101
  • git checkout ändert Ihren Arbeitsbaum,
  • git reset ändert den Verweis, auf den die Verzweigung, in der Sie sich befinden, verweist,
  • git revert fügt eine Übergabe hinzu, die Änderungen rückgängig macht.

9voto

Zurücksetzen - Auf der Commit-Ebene ist das Zurücksetzen eine Möglichkeit, die Spitze eines Zweigs auf einen anderen Commit zu verschieben. Dies kann verwendet werden, um Commits aus dem aktuellen Zweig zu entfernen.

Rückgängig - Das Rückgängigmachen einer Übergabe macht eine Übergabe rückgängig, indem es eine neue Übergabe erzeugt. Dies ist ein sicherer Weg, um Änderungen rückgängig zu machen, da es keine Möglichkeit gibt, die Commit-Historie neu zu schreiben. Im Gegensatz zu git reset, das den bestehenden Commit-Verlauf verändert. Aus diesem Grund sollte git revert verwendet werden, um Änderungen an einem öffentlichen Zweig rückgängig zu machen, und git reset sollte für das Rückgängigmachen von Änderungen an einem privaten Zweig reserviert sein.

Sie können sich unter diesem Link umsehen. Zurücksetzen, Auschecken und Rückgängig machen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X