Wie lösche ich einen Stash, der mit git stash create erstellt wurde?
Lesezeit: 10 Minuten
Paul Wagland
Git Stash scheint eine Menge von dem zu tun, was ich will, außer dass es ein wenig schwierig ist, ein Skript zu schreiben, wenn Sie dann keine Änderungen haben git stash; git stash pop wird etwas anderes tun, als wenn Sie Änderungen in Ihrem Repository haben.
Anscheinend git stash create ist die Antwort auf dieses Problem, und alles funktioniert, bis auf eine Sache … Ich kann den erstellten Stash nicht loswerden. Gibt es eine Möglichkeit, den Stash loszuwerden?
Um es 100% klar zu machen, was ich tue:
Erstellen Sie den Vorrat:
~/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 Stash: (außer dass dieses letzte Bit nicht funktioniert)
~/tmp/a(master) $ git stash drop !$
git stash drop 60629375d0eb12348f9d31933dd348ad0f038435
'60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
Trotz der zeitlichen Distanz möchte ich Mitreisende darauf hinweisen, dass die git apply Während die Ausführung im zweiten Codefeld zum Zeitpunkt des Schreibens dieses Artikels keinen Patch angewendet hat – die Fehlermeldung in der Ausgabe hat Ihnen dies mitgeteilt. Sie haben also tatsächlich versucht, einen Stash zu erstellen (was nicht funktioniert hat, siehe Kommentare unten), einen Stash anzuwenden, der nicht erstellt wurde, und dann einen Stash zu löschen, der nicht erstellt wurde. Deshalb hat nichts, was Sie getan haben, funktioniert.
– Professor Tom
8. März 18 um 22:04 Uhr
@ProfessorTom der Stash wurde erstellt, deshalb hat er einen Hash-Code zurückgegeben und warum der git stash apply funktionierte. Der git apply versucht, eine lokale Patch-Datei zu lesen, die nicht existiert. Um ehrlich zu sein, sollte es wahrscheinlich einfach nicht da sein, und es hätte niemals funktionieren können. Ich bin vage versucht, es aus der Frage zu entfernen, aber da es in seiner jetzigen Form so vielen geholfen hat, werde ich es so lassen, wie es ist.
– Paul Wagland
9. März 18 um 6:30 Uhr
CB Bailey
git stash drop nimmt keinen Parameter – der den obersten Stash löscht – oder eine Stash-Referenz, die so aussieht: stash@{n} die n nominiert, welches Stash fallen gelassen werden soll. Sie können keine Commit-ID an übergeben git stash drop.
git stash drop # drop top hash, stash@{0}
git stash drop stash@{n} # drop specific stash - see git stash list
Hinterlassen eines Testaments Veränderung das stash@{n} Bezeichnungen aller Verstecke weiter unten im Stapel.
Ich bin mir nicht sicher, warum Sie denken, dass Sie einen Vorrat fallen lassen müssen, denn wenn Sie verwenden stash create Für Ihren “Stash” wird kein Stash-Eintrag erstellt, sodass nichts abgelegt werden kann.
Sehen Sie sich die Manpage für git stash an. stash create erstellt keinen Eintrag, sondern nur das Commit-Objekt für den Stash, sodass kein Eintrag im Stash-Protokoll entfernt werden muss.
– CB Bailey
21. April 11 um 6:06 Uhr
Vom Mann: erstellen Erstellen Sie einen Stash (der ein reguläres Commit-Objekt ist) und geben Sie seinen Objektnamen zurück, ohne ihn irgendwo im ref-Namespace zu speichern.
– Rufin
6. Juni 12 um 14:13 Uhr
Vorsicht: Sie sollten wahrscheinlich nicht mehrere wie 1, 2, 3 fallen lassen, da Sie am Ende tatsächlich die ursprünglichen Zahlen 1, 3 und 5 fallen lassen. Der richtige Weg, 1, 2 und 3 fallen zu lassen, wäre zu tun Sie in der Reihenfolge 3, 2, 1 oder 1, 1, 1. Außerdem ist es 0 indiziert, wobei 0 ganz oben auf dem Stapel steht.
– ArtOfWarfare
17. September 13 um 15:36 Uhr
Git Extensions gibt einen unbekannten Befehl aus, wenn die Schaltfläche „Stash Changes“ gedrückt wird, und was auch immer es tut, bleibt beim Beenden und Neustarten der Anwendung bestehen. Es gibt keinen offensichtlichen Weg, den Stash mit der GUI loszuwerden, aber von der Befehlszeile aus zeigt “git stash list” den WIP-Stash an und “git stash clear” entfernt ihn.
– David
16. März 16 um 19:27 Uhr
Wenn Sie dies in Powershell tun, stellen Sie sicher, dass Sie stash@{n} in einfache Anführungszeichen setzen, sonst erhalten Sie eine Fehlermeldung.
– Brian Surowiec
12. September 16 um 21:28 Uhr
dahlbyk
Um einen normalen Stash zu löschen, der mit erstellt wurde git stash , Sie wollen git stash drop oder git stash drop stash@{n}. Siehe unten für weitere Details.
Sie müssen einen Stash, der mit erstellt wurde, nicht löschen git stash create. Aus den Dokumenten:
Erstellen Sie einen Stash-Eintrag (der ein reguläres Commit-Objekt ist) und geben Sie seinen Objektnamen zurück, ohne ihn irgendwo im ref-Namespace zu speichern. Dies soll für Skripte nützlich sein. Es ist wahrscheinlich nicht der Befehl, den Sie verwenden möchten; siehe “speichern” oben.
Da nichts auf den Stash-Commit verweist, wird er schließlich gesammelt.
Ein Stash erstellt mit git stash oder git stash save gespeichert wird refs/stash, und kann mit gelöscht werden git stash drop. Wie bei allen Git-Objekten werden die eigentlichen Stash-Inhalte nicht von Ihrem Computer gelöscht, bis a gc löscht diese Objekte, nachdem sie abgelaufen sind (Standard ist 2 Wochen später).
Ältere Stashes werden in gespeichert refs/stashneu loggen (Versuchen cat .git/logs/refs/stash) und kann mit gelöscht werden git stash drop stash@{n}, wo n ist die Zahl, die durch angezeigt wird git stash list.
Es beantwortet nicht die Titelfrage. Infolgedessen stimmen Leute wie ich, die über Google auf der Suche nach der Antwort auf die Titelfrage auf die Frage stoßen und sich nicht besonders um die tatsächlichen Details kümmern, für die Person, die sie tatsächlich beantwortet hat. Einige Leute stimmen die akzeptierte Antwort auch boshaft ab, weil sie ihnen nicht hilft. Ich persönlich habe gerade die Antwort positiv bewertet, die mir geholfen hat.
– ArtOfWarfare
17. September 13 um 15:33 Uhr
Also: 1) Google “git delete stash” 2) klicke auf den SO-Link basierend auf der ersten Hälfte des Fragentitels 3) stimme die richtige Antwort ab, die sich auf die zweite Hälfte des Titels bezieht. Das ist neu.
– dahlbyk
18. September 13 um 3:19 Uhr
@ArtOfWarfare Das wäre dann ein Mangel an Leseverständnis, denn dies ist ganz klar eine Antwort auf die “Titelfrage”.
– Chris Hayes
18. September 13 um 3:24 Uhr
Meinetwegen. Ich erstelle meine Stashes mit just git stash – Ich weiß nicht, ob das wirklich zutrifft git stash create oder etwas anderes. Git ist sicherlich etwas, worüber ich noch lerne (wenn es das nicht wäre, würde ich SO Q&As nicht so lesen.)
– ArtOfWarfare
18. September 13 um 10:36 Uhr
@AdrianPronk Das ist genau das, was ich empfehlen würde git stash create Pro. Anstatt in einer Patch-Datei mit Zeitstempel zu speichern, kannst du es einfach vom Git-Reflog in einer benutzerdefinierten Referenz speichern lassen (z refs/backup). Ich würde so etwas wie 1) versuchen git stash create, 2) vergleiche den Baum des neuen Stashs mit refs/backup^{tree}, 3) wenn der Baum anders ist, git update-ref --create-reflog refs/backup <stash-sha>. Eventuell werden alte Backup-Verstecke automatisch gelöscht.
– dahlbyk
22. Juni 16 um 1:07 Uhr
Felipe Pereira
Wenn Sie sich zu 100% sicher sind, dass Sie nur einen Vorrat haben oder Sie möchten alle Stashes löschen (mach ein git stash list um 107% sicher zu sein), können Sie Folgendes tun:
git stash clear
..und vergiss sie (es löscht alle Stashes).
Hinweis: Diese Antwort wurde für diejenigen hinzugefügt, die hier gelandet sind und nach einer Möglichkeit gesucht haben, sie alle zu löschen (wie ich).
Wenn Sie nur einen Vorrat haben, würde ich trotzdem empfehlen, ihn zu verwenden git stash drop, da dies nur einen Vorrat fallen lässt und Sie sich keine Sorgen machen müssen, mehr als erwartet zu verlieren.
– Paul Wagland
31. August 14 um 10:48 Uhr
Positiv bewertet, da es tatsächlich die Frage beantwortet, ob dies die beste Vorgehensweise ist oder nicht. Ich brauche das wirklich, da die Verstecke, die ich heute erstellt habe, weg müssen.
– Alex McCabe
6. Oktober 14 um 11:21 Uhr
Ich benutze Stash schon lange. Diesmal war ich jedoch nicht in der Lage, den letzten Vorrat, den ich gemacht hatte, durch einfaches Verwenden loszuwerden git stash drop wie gewöhnlich. Ich bin mir nicht sicher, was ich anders gemacht habe. Wie auch immer, git stash clear hat bei mir funktioniert. Wusste nicht, dass es existiert. +1
– Konstantinos Gaitanis
23. Januar 15 um 12:39 Uhr
+1, weil git sich weigerte, den Stash zu löschen, da eine der vom Stash erstellten Dateien bereits jetzt existierte.
Einen einzelnen Stash-Zustand aus der Stash-Liste entfernen. Wenn nein angegeben wird, wird die letzte entfernt. dh stash@{0}, andernfalls muss es sich um eine gültige Stash-Log-Referenz der Form stash@{} handeln.
Beispiel:
git stash drop stash@{5}
Dies würde den Stash-Eintrag 5 löschen. So sehen Sie die gesamte Liste der Stashes:
git stash list
Sie sollten verwenden
git stash save
und nicht
git stash create
weil dies einen Stash erstellt (der ein reguläres Commit-Objekt ist) und seinen Objektnamen zurückgibt, ohne irgendwo aufbewahren im Ref-Namensraum. Daher wird es nicht mit Stash Apply zugänglich sein.
Benutzen git stash save "some comment" wird verwendet, wenn Sie nicht bereitgestellte Änderungen haben, die Sie replizieren/auf einen anderen Zweig verschieben möchten
Benutzen git stash apply stash@{0} (vorausgesetzt, Ihr gespeicherter Stash-Index ist 0), wenn Sie möchten, dass Ihre gespeicherten (gestashten) Änderungen in Ihrem aktuellen Zweig widergespiegelt werden
kannst du immer verwenden git stash list um alle Ihre Stash-Indizes zu überprüfen
und verwenden git stash drop stash@{0} (vorausgesetzt, Ihr gespeicherter Stash-Index ist 0 und Sie möchten ihn löschen), um einen bestimmten Stash zu löschen.
Nur zur Information – Einfach den Befehl eingeben git stash standardmäßig auf git stash save
– RBT
13. September 17 um 12:16 Uhr
git stash create soll von Skripten verwendet werden. Das ist der Anwendungsfall von OP. Also Empfehlung git stash save kann für “normale” Anwendungen nützlich sein, aber nicht für den Anwendungsfall von OP. OP sollte sich das vielleicht mal anschauen Dokumente: Es gibt zum Beispiel mehr Befehle, die sich auf das Skripting beziehen git stash store
– Adrian W
29. November 18 um 11:20 Uhr
git stash save "message" heutzutage lesen sollte git stash push -m "message". Vergleichen git commit -m "message"
– Tine
23. Mai ’19 um 12:35 Uhr
juhan_h
git stash // create stash,
git stash push -m "message" // create stash with msg,
git stash apply // to apply stash,
git stash apply indexno // to apply specific stash,
git stash list //list stash,
git stash drop indexno //to delete stash,
git stash pop indexno,
git stash pop = stash drop + stash apply
git stash clear //clear all your local stashed code
Nur zur Information – Einfach den Befehl eingeben git stash standardmäßig auf git stash save
– RBT
13. September 17 um 12:16 Uhr
git stash create soll von Skripten verwendet werden. Das ist der Anwendungsfall von OP. Also Empfehlung git stash save kann für “normale” Anwendungen nützlich sein, aber nicht für den Anwendungsfall von OP. OP sollte sich das vielleicht mal anschauen Dokumente: Es gibt zum Beispiel mehr Befehle, die sich auf das Skripting beziehen git stash store
– Adrian W
29. November 18 um 11:20 Uhr
git stash save "message" heutzutage lesen sollte git stash push -m "message". Vergleichen git commit -m "message"
– Tine
23. Mai ’19 um 12:35 Uhr
Um nur einen Stash zu löschen git stash drop
Löschen Sie alle Stashes git stash clear
Um deinen Vorrat zu zeigen git stash show
Um einen bestimmten Stash zu entfernen git stash drop indexnumber z.B git stash drop 4
.
8110000cookie-checkWie lösche ich einen Stash, der mit git stash create erstellt wurde?yes
Trotz der zeitlichen Distanz möchte ich Mitreisende darauf hinweisen, dass die
git apply
Während die Ausführung im zweiten Codefeld zum Zeitpunkt des Schreibens dieses Artikels keinen Patch angewendet hat – die Fehlermeldung in der Ausgabe hat Ihnen dies mitgeteilt. Sie haben also tatsächlich versucht, einen Stash zu erstellen (was nicht funktioniert hat, siehe Kommentare unten), einen Stash anzuwenden, der nicht erstellt wurde, und dann einen Stash zu löschen, der nicht erstellt wurde. Deshalb hat nichts, was Sie getan haben, funktioniert.– Professor Tom
8. März 18 um 22:04 Uhr
@ProfessorTom der Stash wurde erstellt, deshalb hat er einen Hash-Code zurückgegeben und warum der
git stash apply
funktionierte. Dergit apply
versucht, eine lokale Patch-Datei zu lesen, die nicht existiert. Um ehrlich zu sein, sollte es wahrscheinlich einfach nicht da sein, und es hätte niemals funktionieren können. Ich bin vage versucht, es aus der Frage zu entfernen, aber da es in seiner jetzigen Form so vielen geholfen hat, werde ich es so lassen, wie es ist.– Paul Wagland
9. März 18 um 6:30 Uhr