wake-up-neo.com

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

Ich versuche zu lernen, wie ich Dateien und Projekte in einem früheren Zustand wiederherstellen oder zurücksetzen kann, und verstehe den Unterschied zwischen git revert, checkout und reset. Warum gibt es 3 verschiedene Befehle für scheinbar den gleichen Zweck, und wann sollte jemand einen über den anderen wählen?

234
haziz

Diese drei Befehle haben ganz unterschiedliche Zwecke. Sie sind sich nicht einmal annähernd ähnlich.

git revert

Dieser Befehl erstellt ein neues Commit, das die Änderungen gegenüber einem vorherigen Commit rückgängig macht. Dieser Befehl fügt dem Projekt einen neuen Verlauf hinzu (der vorhandene Verlauf wird nicht geändert).

git checkout

Dieser Befehl checkt Inhalte aus dem Repository aus und fügt sie in Ihren Arbeitsbaum ein. Abhängig davon, wie der Befehl aufgerufen wurde, kann dies auch andere Auswirkungen haben. Beispielsweise kann sich auch ändern, an welchem ​​Zweig Sie gerade arbeiten. Dieser Befehl ändert nichts am Verlauf.

git reset

Dieser Befehl ist etwas komplizierter. Abhängig davon, wie es aufgerufen wird, werden verschiedene Aktionen ausgeführt. Es modifiziert den Index (den sogenannten "Staging-Bereich"). Oder es ändert sich, auf welches Commit ein Zweigkopf aktuell zeigt. Dieser Befehl kann den vorhandenen Verlauf ändern (indem das Commit geändert wird, auf das eine Verzweigung verweist).

Verwenden dieser Befehle

Wenn irgendwo in der Projektgeschichte ein Commit durchgeführt wurde und Sie später feststellen, dass das Commit falsch ist und nicht hätte durchgeführt werden dürfen, ist git revert Das richtige Werkzeug für diesen Job. Es macht die durch das fehlerhafte Festschreiben eingeführten Änderungen rückgängig und zeichnet das "Rückgängigmachen" in der Historie auf.

Wenn Sie eine Datei in Ihrem Arbeitsbaum geändert, die Änderung jedoch nicht übernommen haben, können Sie mit git checkout Eine Kopie der Datei aus dem Repository auschecken.

Wenn Sie einen Commit ausgeführt, ihn aber nicht an andere Personen weitergegeben haben und Sie sich gegen diesen Commit entschieden haben, können Sie den Verlauf mit git reset Neu schreiben, sodass der Eindruck entsteht, als hätten Sie ihn nie erstellt verpflichten.

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

411
Dan Moulding
  • git revert wird verwendet, um ein vorheriges Festschreiben rückgängig zu machen. In Git können Sie ein früheres Commit nicht ändern oder löschen. (Eigentlich können Sie das, aber es kann zu Problemen führen.) Anstatt das frühere Festschreiben zu bearbeiten, führt revert ein neues Festschreiben ein, das ein früheres rückgängig macht.
  • git reset wird verwendet, um Änderungen in Ihrem Arbeitsverzeichnis rückgängig zu machen, die noch nicht festgeschrieben wurden.
  • git checkout wird verwendet, um eine Datei aus einem anderen Commit in Ihren aktuellen Arbeitsbaum zu kopieren. Die Datei wird nicht automatisch festgeschrieben.
28
Jonathan

Nehmen wir an, Sie hatten Commits:

C
B
A

git revert B erstellt ein Commit, das Änderungen in B rückgängig macht.

git revert A, erstellt ein Commit, das Änderungen in A rückgängig macht, Änderungen in B jedoch nicht berührt

Beachten Sie, dass das Zurücksetzen von B nicht möglich ist, wenn Änderungen in A von Änderungen in A abhängig sind.

git reset --soft A, ändert den Commit-Verlauf und das Repository; Das Staging- und Arbeitsverzeichnis befindet sich weiterhin im Status C.

git reset --mixed A, ändert den Festschreibungsverlauf, das Repository und das Staging. Das Arbeitsverzeichnis befindet sich weiterhin im Status C.

git reset --hard A, ändert den Commit-Verlauf, das Repository, das Staging- und das Arbeitsverzeichnis. Sie kehren vollständig in den Zustand von A zurück.

23
Akavall
  • git checkout ändert Ihren Arbeitsbaum,
  • git reset ändert, auf welchen Verweis der Zweig verweist,
  • git revert fügt einen Commit hinzu, der Änderungen rückgängig macht.
20
dan_waterworth

Zurücksetzen - Auf der Commit-Ebene können Sie mit dem Zurücksetzen die Spitze eines Zweigs auf ein anderes Commit verschieben. Hiermit können Sie Commits aus dem aktuellen Zweig entfernen.

Zurücksetzen - Durch Zurücksetzen wird ein Commit rückgängig gemacht, indem ein neues Commit erstellt wird. Dies ist eine sichere Methode, um Änderungen rückgängig zu machen, da keine Möglichkeit besteht, den Festschreibungsverlauf erneut zu schreiben. Vergleichen Sie dies mit git reset, wodurch der bestehende Commit-Verlauf geändert wird. Aus diesem Grund sollte git revert verwendet werden, um Änderungen in einem öffentlichen Zweig rückgängig zu machen, und git reset sollte für das Rückgängigmachen von Änderungen in einem privaten Zweig reserviert werden.

Sie können sich diesen Link ansehen Zurücksetzen, Auschecken und Zurücksetzen

6

Wenn Sie den Baum gebrochen, aber den Code nicht festgeschrieben haben, können Sie git reset, und wenn Sie nur eine Datei wiederherstellen möchten, können Sie git checkout.

Wenn Sie den Baum gebrochen und den Code festgeschrieben haben, können Sie git revert HEAD.

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

5
LostMohican