"Zurücksetzen" ist der Weg, um Änderungen lokal rückgängig zu machen. Beim Festschreiben wählen Sie zuerst Änderungen aus, die in " git add " aufgenommen werden sollen - das wird als "Staging" bezeichnet. Und sobald die Änderungen inszeniert sind, " git Commit " Sie sie.
Um entweder vom Staging oder vom Commit zurückzutreten, setzen Sie den HEAD zurück. In einem Zweig ist HEAD eine Git-Variable, die auf das letzte Commit verweist. Wenn Sie also inszeniert, aber nicht festgeschrieben haben, setzen Sie " HEAD HEAD zurück ". Dies sichert den aktuellen HEAD, indem Änderungen von der Bühne genommen werden. Es ist eine Abkürzung für " git reset --mixed HEAD ~ 0" ".
Wenn Sie bereits ein Commit durchgeführt haben, ist der HEAD bereits fortgeschritten, sodass Sie zum vorherigen Commit sichern müssen. Hier " setzen Sie HEAD ~ 1 zurück " oder " HEAD ^ 1 zurücksetzen " oder " HEAD ~ zurücksetzen " oder " HEAD ^ zurücksetzen " - alle Referenz HEAD minus eins.
Welches ist das bessere Symbol, ~ oder ^? Stellen Sie sich die ~ Tilde als einen einzelnen Stream vor. Wenn jedes Commit ein einzelnes übergeordnetes Element hat und es sich nur um eine Reihe von Änderungen in der Reihenfolge handelt, können Sie den Stream mithilfe der Tilde als HEAD ~ 1, HEAD ~ 2, HEAD sichern ~ 3, für Eltern, Großeltern, Urgroßeltern usw. (technisch gesehen findet es den ersten Elternteil in früheren Generationen).
Wenn es zu einer Zusammenführung kommt, haben Commits mehr als ein übergeordnetes Element. Dann kommt das ^ caret ins Spiel - Sie können sich erinnern, weil es zeigt, wie die Zweige zusammenkommen. Mit dem Caret wäre HEAD ^ 1 der erste Elternteil und HEAD ^ 2 der zweite Elternteil eines einzelnen Commits - Mutter und Vater zum Beispiel.
Wenn Sie also nur einen Sprung auf ein Commit mit nur einem Elternteil zurückgehen, sind HEAD ~ und HEAD ^ gleichwertig - Sie können beide verwenden.
Der Reset kann auch --soft , --mixed oder --hard sein . Bei einem Soft-Reset wird nur das Commit zurückgesetzt - der HEAD wird zurückgesetzt, die Dateien aus dem früheren Commit werden jedoch nicht ausgecheckt, sodass alle Änderungen im Arbeitsverzeichnis erhalten bleiben. Und --soft reset löscht nicht einmal die Bühne (auch als Index bezeichnet ), sodass alle bereitgestellten Dateien weiterhin auf der Bühne stehen.
Bei einem --mixed- Reset (Standardeinstellung) werden auch die Dateien aus dem früheren Commit nicht ausgecheckt , sodass alle Änderungen beibehalten werden, die Phase jedoch gelöscht wird. Deshalb wird ein einfacher " Git Reset HEAD " die Bühne räumen.
Ein --hard- Reset setzt den HEAD zurück und löscht die Phase, überprüft aber auch alle Dateien aus dem früheren Commit und überschreibt so alle Änderungen.
Wenn Sie das Commit in ein Remote-Repository verschoben haben, funktioniert das Zurücksetzen nicht so gut. Sie können lokal zurücksetzen, aber wenn Sie versuchen, auf die Fernbedienung zu pushen, erkennt git, dass sich Ihr lokaler HEAD hinter dem HEAD in der Remote-Verzweigung befindet, und weigert sich, zu pushen. Sie können vielleicht den Push erzwingen, aber Git mag das wirklich nicht.
Alternativ können Sie verstauen Sie Ihre Änderungen , wenn Sie sie behalten möchten, überprüfen die früher begehen, un-bunkern die Änderungen, Bühne sie, erstellen Sie eine neue begehen, und dann , dass drücken.