Was ist der Unterschied zwischen “git checkout -f” und “git reset –hard HEAD”?

Lesezeit: 2 Minuten

Benutzer-Avatar
osm

Ich muss lokale Änderungen für Bereitstellungen rückgängig machen. (Ich hatte verwendet svn revert dafür in alten skool SVN-Tagen.)

Und ich benutze git reset --hard HEAD dafür. (Ebenfalls git fetch und git merge origin/$branch --no-ff zum Synchronisieren mit Upstream-Zweig.)

Aber einige Artikel Punkte git checkout -f zum Zurücksetzen von Änderungen.

Was sind die Hauptunterschiede zwischen diesen Befehlen? Welcher Weg ist empfehlenswert?

  • mögliches Duplikat von Gibt es einen Unterschied zwischen “git reset –hard hash” und “git checkout hash”?

    – Casebash

    16. November 2011 um 5:50 Uhr

Benutzer-Avatar
Colin Herbert

Beide haben genau die gleiche Wirkung. Ich empfehle Ihnen, die Lösung zu wählen, mit der Sie sich wohler fühlen.

Aber wenn in diesem speziellen Fall der Effekt derselbe ist, wäre er bei anderen Werten völlig anders. Grundsätzlich (es gibt mehr, siehe verlinkte Themen) verschieben Sie mit einem Reset den aktuellen Zweig und den HEAD zu einem bestimmten Commit, aber mit einem Checkout verschieben Sie nur den HEAD . Weitere Einzelheiten siehe unten.


Ressourcen:

Zum gleichen Thema:

  • Gibt es einen Unterschied zwischen git reset –hard HEAD und git checkout .?
  • Gibt es einen Unterschied zwischen „git reset –hard hash“ und „git checkout hash“?
  • Können Sie mir git reset in einfachem Englisch erklären?

Ich habe noch nicht den Vertreter, um andere Antworten zu kommentieren. Ich wollte nur hinzufügen, dass ich auf einen Fall gestoßen bin, in dem die beiden Befehle NICHT den gleichen Effekt haben. Ich bin in einen seltsamen Zustand geraten, also ist dies definitiv ein Grenzfall. Folgendes ist passiert:

Ich war in einer Filiale, alles sauber. Ich habe Master ausgecheckt git checkout master und gefunden von git status dass es Änderungen an bestehenden Dateien gab, die nicht für einen Commit bereitgestellt wurden (ja, an dem Code, den ich gerade ausgecheckt habe). Ich habe versucht, Stash wieder in einen sauberen Zustand zu versetzen, das Stash soll aber abgeschlossen sein git status war noch unverändert. Auch probiert git reset --hard HEAD. Auch er meldete den erfolgreichen Abschluss, aber der Status war nicht anders. Ich konnte diese seltsamen Änderungen nicht abbrechen.

Jedoch, git checkout -f löste dies. Ich konnte mich von diesem seltsamen Zustand lösen. In gewisser Weise sind die beiden also nicht gleich.

  • Ich hatte gerade genau die gleiche Situation. Es gab eine Menge modifizierter Dateien, die git reset –hard HEAD nicht verschwinden ließ, aber git checkout -f tat es, also sind sie auf einer bestimmten Ebene eindeutig nicht gleich.

    – Mike Wasson

    9. Juli 2014 um 14:42 Uhr

  • In unserem Fall lag es an sich ändernden Dateiberechtigungen; das hat es behoben stackoverflow.com/questions/1257592/…

    – Mike Wasson

    9. Juli 2014 um 14:49 Uhr

  • Möglicherweise tritt dieses Problem auch auf, wenn Ihre Git-Zeilenendeeinstellungen etwas durcheinander sind und versucht wird, diese beim Auschecken zu konvertieren.

    – Simon Osten

    31. Mai 2018 um 6:36 Uhr

1316190cookie-checkWas ist der Unterschied zwischen “git checkout -f” und “git reset –hard HEAD”?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy