Git Stash scheint viel von dem zu tun, was ich will, außer dass es ein wenig schwierig ist, Skripte zu erstellen. Wenn Sie keine Änderungen haben, git stash; git stash pop
wird dies etwas anderes tun, als wenn Sie Änderungen in Ihrem Repository haben.
Es scheint, dass dies git stash create
die Antwort auf dieses Problem ist, und alles funktioniert, bis auf eine Sache… Ich kann den erstellten Vorrat nicht loswerden. Gibt es eine Möglichkeit, das Versteck loszuwerden?
Um 100% klar zu machen, was ich tue:
Erstellen Sie das Versteck:
~/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 das Versteck:
~/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
git apply
Lauf im zweiten Codefeld zum Zeitpunkt dieses Schreibens keinen Patch angewendet hat - die Fehlermeldung in der Ausgabe hat Ihnen dies mitgeteilt. Sie haben also versucht, einen Stash zu erstellen (was nicht funktioniert hat, siehe Kommentare unten). Wenden Sie einen Stash an, der nicht erstellt wurde, und löschen Sie dann einen Stash, der nicht erstellt wurde. Deshalb haben Sie nichts getan.git stash apply
hat funktioniert. Diegit apply
Versuche, eine lokale Patch-Datei zu lesen, die nicht vorhanden ist. Um ehrlich zu sein, sollte es wahrscheinlich nicht da sein und es hätte nie 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.Antworten:
Um einen normalen Vorrat zu löschen, der mit erstellt wurde
git stash
, möchten Siegit stash drop
odergit stash drop stash@{n}
. Siehe unten für weitere Details.Sie müssen keinen mit erstellten Stash löschen
git stash create
. Aus den Dokumenten:Da nichts auf das Stash-Commit verweist, wird irgendwann Müll gesammelt.
Ein mit
git stash
oder erstellter Stashgit stash save
wird gespeichertrefs/stash
und kann mit gelöscht werdengit stash drop
. Wie bei allen Git-Objekten wird der eigentliche Stash-Inhalt erst dann von Ihrem Computer gelöscht, wenngc
diese Objekte nach Ablauf gelöscht werden (Standard ist 2 Wochen später).Ältere Stashes werden im
refs/stash
Reflog gespeichert (trycat .git/logs/refs/stash
) und können mit gelöscht werdengit stash drop stash@{n}
, wobein
die Nummer durch angezeigt wirdgit stash list
.quelle
git stash
- ich weiß nicht, ob das tatsächlichgit stash create
oder etwas anderes zugeordnet ist. Git ist sicherlich etwas, worüber ich noch lerne (wenn es nicht so wäre, würde ich SO Q & As nicht so lesen.)git stash create
. Anstatt in einer Patch-Datei mit Zeitstempel zu speichern, können Sie das Git-Reflog einfach in einer benutzerdefinierten Referenz (zrefs/backup
. B. ) für Sie speichern lassen . Ich würde versuchen, etwas wie 1)git stash create
, 2) den Baum eines neuen Stashs mitrefs/backup^{tree}
3) zu vergleichen, wenn der Baum anders ist ,git update-ref --create-reflog refs/backup <stash-sha>
. Eventuell werden alte Backup-Stashes automatisch entfernt.git stash drop
Nimmt keinen Parameter - der den obersten Stash löscht - oder eine Stash-Referenz, die so aussieht:stash@{n}
welchen
nominiert, welcher Stash gelöscht werden soll. Sie können keine Commit-ID an übergebengit stash drop
.Durch das Löschen eines Stashs werden die Bezeichnungen aller Stashes weiter unten im Stapel geändert
stash@{n}
.Ich bin mir nicht sicher, warum Sie denken, dass Sie einen Stash löschen müssen, denn wenn Sie
stash create
einen Stash-Eintrag verwenden, wird dieser nicht für Ihren "Stash" erstellt, sodass Sie nichts löschen können.quelle
Wenn Sie zu 100% sicher sind, dass Sie nur einen Stash haben oder alle Stashes löschen möchten (stellen Sie einen Wert von
git stash list
107% sicher), können Sie Folgendes tun:..und vergiss sie (es löscht alle Verstecke).
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).
quelle
git stash drop
, da dadurch nur ein Vorrat abfällt und Sie sich keine Sorgen machen müssen, mehr als erwartet zu verlieren.git stash drop
wie gewohnt benutzte . Ich bin mir nicht sicher, was ich anders gemacht habe. Jedenfalls hatgit stash clear
für mich gearbeitet. Wusste nicht, dass es existiert. +1Aus dem Git-Dokument: http://git-scm.com/docs/git-stash
Entfernen Sie einen einzelnen versteckten Status aus der Stash-Liste. Wenn nein angegeben wird, wird die neueste entfernt. dh
stash@{0}
andernfalls muss eine gültige Stash-Protokollreferenz des Formulars stash @ {} vorhanden sein.Beispiel:
Dies würde den Stash-Eintrag 5 löschen. So zeigen Sie die gesamte Liste der Stashes an:
quelle
git stash show stash@{REPLACE_IT_WITH_STASH_INDEX}
vor der Ausführung zu überprüfengit stash drop
. Glauben Sie mir, es wird eine Menge Ärger sparen :)Sie sollten verwenden
und nicht
da dies einen Stash erstellt (der ein reguläres Commit-Objekt ist) und seinen Objektnamen zurückgibt, ohne ihn irgendwo im ref-Namespace zu speichern . Daher wird mit Stash Apply nicht zugänglich sein.
Die Verwendung
git stash save "some comment"
wird verwendet, wenn Sie nicht bereitgestellte Änderungen vorgenommen haben, die Sie replizieren / in einen anderen Zweig verschieben möchtenVerwenden Sie
git stash apply stash@{0}
(vorausgesetzt, Ihr gespeicherter Versteckindex ist 0), wenn Ihre gespeicherten (verdeckten) Änderungen sich auf Ihren aktuellen Zweig auswirken sollenSie können jederzeit
git stash list
alle Ihre Versteckindizes überprüfenund verwenden Sie
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.quelle
git stash
standardmäßiggit stash save
git stash create
soll von Skripten verwendet werden. Das ist der Anwendungsfall von OP. Daher kann die Empfehlunggit stash save
für "normale" Anwendungen nützlich sein, nicht jedoch für den Anwendungsfall von OP. OP möchte vielleicht einen Blick auf die Dokumente werfen : Es gibt mehr Befehle im Zusammenhang mit Skripten, zum Beispielgit stash store
git stash save "message"
heutzutage sollte lesengit stash push -m "message"
. Vergleichen Siegit commit -m "message"
Es funktioniert auch
mögen
quelle
Das Dokument ist hier (auf Chinesisch) bitte klicken.
Sie können verwenden
quelle
git stash create
unterscheidet sichgit stash save
insbesondere davon, dass das Erstellungsformular nicht in der Liste angezeigt wird und nicht gelöscht werden kann, daher die Frage.quelle