926 Stimmen

Wie löscht man einen mit git stash create erstellten Stash?

Git stash scheint viel von dem zu tun, was ich will, außer dass es ein wenig schwer zu skripten, wie die, wenn Sie keine Änderungen haben, dann git stash; git stash pop wird etwas anderes tun, als wenn Sie Änderungen in Ihrem Repository haben.

Es scheint, dass git stash create ist die Antwort auf dieses Problem, und alles funktioniert, bis auf eine Sache Ich kann den angelegten Vorrat nicht loswerden. Gibt es eine Möglichkeit, den Vorrat loszuwerden?

Um zu 100% klar zu machen, was ich tue:

Legen Sie den Vorrat an:

~/tmp/a(master) $ git stash create 
60629375d0eb12348f9d31933dd348ad0f038435
~/tmp/a(master) $ git st
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#
~/tmp/a(master) $ git reset --hard
HEAD is now at 555d572 log message

Verwenden Sie den Vorrat:

~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435
fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory
~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   b
#

Löschen Sie den Vorrat: (außer, dass dieser letzte Teil nicht funktioniert)

~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference

1279voto

CB Bailey Punkte 693084

git stash drop nimmt keinen Parameter - was den obersten Vorratsbehälter fallen lässt - oder einen Verweis auf den Vorratsbehälter, der wie folgt aussieht: stash@{n} die n schlägt vor, welches Versteck abgelegt werden soll. Sie können keine Commit-ID an git stash drop .

git stash drop            # drop top hash, stash@{0}
git stash drop stash@{n}  # drop specific stash - see git stash list

Das Fallenlassen eines Verstecks wird ändern その stash@{n} Bezeichnungen aller Verstecke weiter unten im Stapel.

Ich bin mir nicht sicher, warum Sie glauben, einen Vorrat abwerfen zu müssen, denn wenn Sie die stash create für Ihren "Vorrat" wird kein Eintrag erstellt, so dass es nichts abzugeben gibt.

605voto

dahlbyk Punkte 71222

Um einen normalen Vorrat zu löschen, der mit git stash wollen Sie git stash drop o git stash drop stash@{n} . Siehe unten für weitere Einzelheiten.


Sie müssen einen Vorrat nicht löschen, der mit git stash create . Aus den Unterlagen:

Erstellen eines Stash-Eintrags (der ein reguläres Commit-Objekt ist) und Rückgabe seines Objektnamens, ohne ihn irgendwo im ref-Namensraum zu speichern. Dies soll für Skripte nützlich sein. Es ist wahrscheinlich nicht der Befehl, den Sie verwenden wollen; siehe "save" oben.

Da nichts auf den Stash-Commit verweist, wird er irgendwann zu Müll verarbeitet.


Ein Versteck erstellt mit git stash o git stash save wird gespeichert in refs/stash und kann gelöscht werden mit git stash drop . Wie bei allen Git-Objekten wird der tatsächliche Inhalt des Verstecks nicht von Ihrem Computer gelöscht, bis ein gc löscht diese Objekte, nachdem sie abgelaufen sind (Standardwert ist 2 Wochen später).

Ältere Stashes werden in der Datei refs/stash reflog (versuchen cat .git/logs/refs/stash ), und kann mit git stash drop stash@{n} , wobei n ist die Zahl, die durch git stash list .

265voto

Felipe Pereira Punkte 10243

Wenn Sie 100% sicher sind, dass Sie nur einen Vorrat haben oder Sie wollen alle Verstecke löschen (machen Sie eine git stash list um 107% sicher zu sein), können Sie eine:

git stash clear

und vergessen Sie sie (es werden alle Verstecke gelöscht).

Hinweis: Diese Antwort wurde für diejenigen hinzugefügt, die hier gelandet sind und nach einer Möglichkeit suchen, sie alle zu löschen (wie ich).

87voto

Jorge Punkte 1293

Aus dem Git-Dokument: http://git-scm.com/docs/git-stash

drop [-q|--quiet] []

Entfernt einen einzelnen gespeicherten Zustand aus der Stash-Liste. Wenn no angegeben wird, wird der letzte Zustand entfernt, d.h. stash@{0} sein, ansonsten muss es sich um eine gültige Stash-Log-Referenz der Form stash@{} handeln.

Beispiel:

git stash drop stash@{5}

Dies würde den Eintrag 5 im Versteck löschen. Um die gesamte Liste der Verstecke zu sehen:

git stash list

73voto

Shalom Sam Punkte 1529

Sie sollten Folgendes verwenden

git stash save

und nicht

git stash create

denn dadurch wird ein Stash (ein reguläres Commit-Objekt) erstellt und sein Objektname zurückgegeben, ohne überall aufbewahren im ref-Namensraum. Daher wird mit stash apply nicht darauf zugegriffen werden können.

Verwenden Sie git stash save "some comment" wird verwendet, wenn Sie unbearbeitete Änderungen haben, die Sie auf einen anderen Zweig replizieren/verschieben wollen

Verwenden Sie git stash apply stash@{0} (vorausgesetzt, Ihr gespeicherter Stash-Index ist 0), wenn Sie möchten, dass Ihre gespeicherten (versteckten) Änderungen in Ihrem aktuellen Zweig berücksichtigt werden

können Sie jederzeit git stash list um alle Ihre Versteckindizes zu überprüfen

und verwenden git stash drop stash@{0} (vorausgesetzt, der Index Ihres gespeicherten Vorrats ist 0 und Sie wollen ihn löschen), um einen bestimmten Vorrat zu löschen.

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