Git Stash Pop verwerfen

132

Ich habe einen Git Stash Pop gemacht und jetzt habe ich eine Menge Konflikte. Ich hatte meinen gesamten aktuellen Code vor dem festgeschrieben. Gibt git stash popes also eine Möglichkeit, zum letzten Festschreiben zurückzukehren und alle Konflikte und den Code des git stash popinjizierten zu beseitigen?

jdog
quelle
Möchten Sie immer noch, dass die geknallte Arbeit gespeichert wird, oder möchten Sie sie nie wieder sehen?
Jscs
1
Nein, ich will die Popped-Arbeit nicht. Ich habe das Versteck wie vor 4 Monaten gemacht und bin mir nicht sicher, was überhaupt da drin ist?
JDOG
2
Interessieren Sie sich für Dinge, die vor dem Verstauen nicht festgeschrieben wurden?
Andrew Marshall
Die vor 4 Monaten oder die heute? Ich will, was ich vor einer Stunde hatte.
JDOG
5
Wenn es bei Ihnen zu Konflikten kommt, git stashwird der Stash von git nicht aus der Liste entfernt. Zerstört git reset --hard HEADalso nicht die geknallte Arbeit.
Jwadsack

Antworten:

188

Dies wurde bereits beim Stackoverflow gefragt und beantwortet (siehe Zurücksetzen des Git-Repositorys auf ein vorheriges Commit? ). Die einfache Antwort lautet jedoch:

git reset --hard HEAD

Dies sollte sich um Ihr Problem kümmern. Beachten Sie, dass dadurch alle nicht festgeschriebenen Änderungen aus dem Repository entfernt werden.

Beachten Sie, dass bei Konflikten der Vorrat erhalten bleibt. Aus den Stash-Dokumenten :

Das Anwenden des Staates kann mit Konflikten fehlschlagen. In diesem Fall wird es nicht aus der Stash-Liste entfernt. Sie müssen die Konflikte von Hand lösen und anschließend git stash dropmanuell anrufen .

MichaelMilom
quelle
1
Dadurch wird Ihr lokales Repo auf das letzte Commit zurückgesetzt. Sie sollten in der Lage sein, alle Ihre Commits (seit dem letzten Push) ohne Probleme zu übertragen. Wenn es nicht funktioniert, senden Sie die Ergebnisse zurück zu Ihrer vorherigen Frage. Viel Glück.
MichaelMilom
28
Aber das wird dein Versteck verlieren
K. Weber
19
@ K.Weber Wenn es git stash popzu Konflikten kommt, wird der Stash nicht aus der Stash-Liste gelöscht.
Daiwei
1
Ich bin mir nicht sicher, wer das "Eigentlich wirst du deinen Vorrat nicht verlieren", ich habe nur meinen verloren
Anthony
4
Nicht viel von einer Lösung imho, da es darauf hinweist, dass Sie werden Uncommited Änderungen verloren.
Ivan P
4

Das Zurücksetzen kann auch für bestimmte Dateien aufgerufen werden:

git reset HEAD <filename>...

Sie können eine Datei jedoch nicht hart zurücksetzen. Sie können die Änderungen jedoch nach dem Auschecken rückgängig machen:

git checkout -- <filename>...

Ihr Vorrat wird erhalten bleiben, wie Luke in der Antwort von MichaelMilom hervorgehoben hat.

Dies ist nützlich, wenn Sie Ihre nicht festgeschriebenen lokalen Änderungen nicht verlieren möchten.

Poppolopoppo
quelle
0

Wenn Sie die Arbeit nie wieder im Popped Stash sehen möchten, ist dies so einfach wie ein Hard-Reset:

git reset --hard HEAD

Dies weist git an, die Tatsache zu ignorieren, dass Sie nicht festgeschriebene Änderungen in Ihrem Arbeitsverzeichnis vorgenommen haben, und legt das Arbeitsverzeichnis, den Staging-Bereich und den von Ihnen angegebenen Commit fest - in diesem Fall den vorhandenen HEAD, der alle von Ihnen ausgeführten Arbeiten enthält Ich habe mich gerade verpflichtet.

jscs
quelle