521 Stimmen

Was ist der Unterschied zwischen "git reset" und "git checkout"?

Ich habe immer gedacht, dass git reset y git checkout in dem Sinne, dass beide das Projekt zu einem bestimmten Commit zurückbringen. Ich bin jedoch der Meinung, dass sie nicht genau dasselbe sein können, da dies überflüssig wäre. Was ist der eigentliche Unterschied zwischen den beiden? Ich bin ein wenig verwirrt, da das svn nur über svn co um die Übergabe rückgängig zu machen.

HINZUFÜGEN

VonC und Charles erklärten die Unterschiede zwischen git reset y git checkout wirklich gut. Mein derzeitiges Verständnis ist, dass git reset macht alle Änderungen an einer bestimmten Übertragung rückgängig, während git checkout bereitet sich mehr oder weniger auf eine Niederlassung vor. Die folgenden beiden Diagramme waren für mich sehr hilfreich, um zu diesem Verständnis zu gelangen:

http://a.imageshack.us/img651/1559/86421927.png http://a.imageshack.us/img801/1986/resetr.png

ZUSÄTZLICH 3

De http://think-like-a-git.net/sections/rebase-from-the-ground-up/using-git-cherry-pick-to-simulate-git-rebase.html können Checkout und Reset die Umbasierung emulieren.

enter image description here

git checkout bar 
git reset --hard newbar 
git branch -d newbar 

enter image description here

2voto

wiki1000 Punkte 411

Die beiden Befehle (Reset und Checkout) sind völlig unterschiedlich.

checkout X IST NICHT reset --hard X

Wenn X ein Zweigname ist, checkout X wird die aktuelle Verzweigung ändern während reset --hard X wird nicht.

1voto

aderchox Punkte 1534

Hier eine Klärung der Zweideutigkeit:

  • git checkout verschiebt den HEAD zu einem anderen Commit( sein könnte eine Änderung auch unter Verwendung eines Markennamens), sondern :

    1. auf der Verzweigung, in der Sie sich befinden, bleibt der Zeiger auf die Spitze dieser Verzweigung (z. B. "main") unverändert (Sie könnten also in einer abgetrennter Kopf Zustand).

    2. Auch der Bereitstellungsbereich und das Arbeitsverzeichnis bleiben unverändert (in dem Zustand, in dem sie sich vor dem Checkout befanden).

Beispiele:

git checkout 3ad2bcf <--- checkout to another commit
git checkout another-branch <--- checkout to another commit using a branchname
  • Git-Reset verschiebt auch den HEAD jedoch wieder mit zwei Unterschiede :

    1. Es verschiebt auch den Zeiger, der auf die Übergabe an der Spitze des aktuellen Zweigs zeigt. Nehmen wir an, der Zeiger auf den aktuellen Zweig heißt "main", dann führen Sie ein git-reset durch, dann zeigt der main-Zeiger auf einen anderen Commit, und der HEAD zeigt ebenfalls auf diesen Commit (im Grunde zeigt HEAD auf diesen Commit indirekt durch das Zeigen auf den Hauptzeiger, ist es immer noch ein befestigter Kopf(!) aber das ist hier nicht von Bedeutung).

    2. Beim Zurücksetzen von Git werden der Bereitstellungsbereich und das Arbeitsverzeichnis nicht unbedingt in dem Zustand belassen, in dem sie sich vor dem Zurücksetzen befanden. Wie Sie wissen, gibt es drei Arten des Zurücksetzens: weich, gemischt (Standard) und hart:

      • Beim Soft-Reset bleiben sowohl der Bereitstellungsbereich als auch das Arbeitsverzeichnis in dem Zustand, in dem sie sich vor dem Reset befanden (ähnlich wie beim Checkout, aber vergessen Sie nicht den Unterschied Nr. 1).
      • Bei der gemischten Rückstellung, die die Standardart der Rückstellung ist, werden zusätzlich zu Unterschied Nr. 1 die Werte des Bereitstellungsbereichs vorgeschlagene nächste Mittelbindung (also das, was Sie per Git hinzugefügt haben), wird ebenfalls auf den neuen Commit gesetzt, auf den per HEAD verwiesen wird. ABER im Arbeitsverzeichnis haben alle Dateien immer noch Ihre letzten Bearbeitungen (deshalb ist diese Art des Zurücksetzens die Standardeinstellung, damit Sie Ihre Arbeit nicht verlieren).
      • Bei einem Hard-Reset werden zusätzlich zum Unterschied #1 alle drei Bäume HEAD, staging-area und ALSO das Arbeitsverzeichnis auf den neuen Point-to-by-HEAD Commit geändert.

Beispiele:

git reset --soft 3ad2bcf
git reset da3b47

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