Wie kann ich alle meine Git-Stashes gleichzeitig löschen?

1406

Wie kann ich alle meine Git- Stashes gleichzeitig löschen ?

Konkret meine ich mit der Eingabe eines Befehls.

Rebekah Waterbury
quelle

Antworten:

2461

Der folgende Befehl löscht alle Ihre Verstecke:

git stash clear

Aus der Git-Dokumentation :

clear

Entfernen Sie alle versteckten Zustände.

WICHTIGE WARNUNG: Diese Zustände werden dann beschnitten und können möglicherweise nicht wiederhergestellt werden (...).

Tadeck
quelle
13
warum nicht git stash drop?
user20358
137
@ user20358: Weil stash drop(“ einen einzigen verstaute Zustand aus dem Versteck Liste entfernen Wenn kein <Stash> angegeben wird, entfernt es die spätestens ein (...).. ‚) nicht die Frage beantworten (‘ Wie kann ich lösche alle von mein Git versteckt sich sofort? ")?
Tadeck
11
Zusätzlich zu der akzeptierten Antwort - um git stash clearzu bestätigen, ob alle gelöscht wurden, verwenden Sie -git stash list
Kamal
2
@ jedd.ahyoung Dies sollte weitere 1.000 Upvotes haben. Die Dokumentation für gitist praktisch nicht zu finden! git-scm.com/docs/git-stash
Drenai
11
@ Ryan: git help <command>ist der beste Weg, um Dokumentation zu bekommen (und es ist eigentlich ziemlich gut). git help stashZeigen Sie in diesem Fall deutlich, dass git stash cleardies die Tat ist (dies hat mich nicht davon abgehalten, zuerst zu SO zu kommen und die Antwort zu bewerten ... aber das sagt Ihnen mehr über mich als git: D)
Marco Massenzio
46

Es gibt zwei Möglichkeiten, einen Stash zu löschen:

  1. Wenn Sie einen bestimmten Vorrat nicht mehr benötigen, können Sie ihn löschen mit : $ git stash drop <stash_id>.
  2. Sie können alle Ihre Verstecke aus dem Repo löschen mit : $ git stash clear.

Verwenden Sie beide mit Vorsicht. Es ist möglicherweise schwierig, die einmal gelöschten Stashes zurückzusetzen.

Hier ist der Referenzartikel .

Nesha Zoric
quelle
2
Das Schließen des Terminals hat nichts damit zu tun. Git ist kein Dämon; Es wird nur ausgeführt, wenn Sie es aufrufen. Es hat keine Ahnung, dass Sie das Terminal geschlossen haben.
DylanYoung
31

Mit diesem Befehl können Sie alle versteckten Änderungen anzeigen.

git stash list

Mit dem folgenden Befehl können Sie alle Ihre versteckten Änderungen löschen

git stash clear

Wenn Sie nun eine der versteckten Änderungen aus dem Stash-Bereich löschen möchten

git stash drop stash@{index}   // here index will be shown after getting stash list.

Hinweis: git stash listErmöglicht das Abrufen des Index aus dem Stash-Bereich von Git.

Vikrant Kashyap
quelle
Erwähnenswert ist, dass zumindest für das in VSCode integrierte Terminal unter Windows 10 git stash drop 'stash@{index}'Apostrophe vorhanden sind.
Oriol Miró
13

Ich wollte ein paar aktuelle Verstecke behalten, aber alles andere löschen.

Da alle Verstecke neu nummeriert werden, wenn Sie einen ablegen, ist dies tatsächlich einfach zu tun. So löschen Sie alle Stashes, die älter als stash @ {19} sind:

while git stash drop 'stash@{20}'; do true; done
Kette
quelle
Gilt dies für indizierte Werte, die in Git 2.11 eingeführt wurden und bei denen Sie git stash pop 3stattdessen auf den 3. Stash aus der Stash-Liste verweisen können ? Ich wollte wissen, ob wir die whileSchleife verwenden und Stashes mithilfe von Indexwerten löschen können.
tom_mai78101
Ich liebe die Einfachheit dieser schönen, eleganten Lösung!
Dominic
3

Ich hatte eine andere Anforderung, da nur wenige Vorräte entfernt werden müssen. Der folgende Code wäre in diesem Fall hilfreich.

#!/bin/sh
for i in `seq 5 8`
do
   git stash drop stash@{$i}
done

/ * löscht von 5 bis 8 Index * /

Bala Krishnan
quelle
versuchen Siefor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan
3
Beachten Sie, dass sich die verbleibenden Verstecke beim Ablegen um 1 Stelle nach oben bewegen. Wenn Sie also von 5 auf 8 entfernen möchten, müssen Sie entweder rückwärts zählen oder stash @ {5} viermal entfernen. Zum Beispiel: for i in `seq 4`; do git stash drop 'stash@{5}'; done
Warp
@ChrisMcCowan Ihr Code fehlt auch eindo
steezeburger
3

Wenn Sie den neuesten Stash oder einen bestimmten Index entfernen möchten -

git stash drop type_your_index

> git stash list

  stash@{0}: abc
  stash@{1}: xyz
  stash@{1}: pqr

> git stash drop 0

  Dropped refs/stash@{0}

> git stash list

  stash@{0}: xyz
  stash@{1}: pqr

wenn Sie alle Vorräte auf einmal entfernen möchten -

> git stash clear
>

> git stash list
>

Warnung : Sobald Sie fertig sind, können Sie Ihren Vorrat nicht mehr zurücksetzen

Shivam Bharadwaj
quelle
1

Verwenden Sie: Löschen Sie alle Stashes, die älter als 40 Tage sind:

git reflog expire --expire-unreachable=40.days refs/stash

Hinzufügen, um --dry-runzu sehen, welche Stashes gelöscht werden.

Eine Erklärung und weitere Einzelheiten finden Sie unter https://stackoverflow.com/a/44829516/946850 .

krlmlr
quelle