Comment puis-je supprimer tous mes stashs Git à la fois?

1407

Comment puis-je supprimer tous mes stashs Git à la fois?

Plus précisément, je veux dire, en tapant une commande.

Rebekah Waterbury
la source

Réponses:

2462

La commande suivante supprime tous vos stashes:

git stash clear

De la documentation git :

clear

Supprimez tous les états cachés.

AVERTISSEMENT IMPORTANT: Ces états seront alors soumis à l'élagage, et peuvent être impossibles à récupérer (...).

Tadeck
la source
13
pourquoi pas git stash drop?
user20358
138
@ user20358: Parce que stash drop( » Suppression d' un seul état planqué dans la liste Stash Lorsqu'aucun <Stash> est donné, il supprime le dernier (...).. « ) ne répond pas à la question ( » Comment puis - je supprimer tous des mon Git se cache à la fois? ")?
Tadeck
12
En plus de la réponse acceptée mentionnée - git stash clear, pour confirmer si tout est effacé, utilisez -git stash list
kamal
2
@ jedd.ahyoung Cela devrait avoir 1 000 autres votes positifs. La documentation de gitest pratiquement impossible à trouver! git-scm.com/docs/git-stash
Drenai
11
@Ryan: git help <command>est le meilleur moyen d'obtenir de la documentation (et c'est en fait assez bon). Dans ce cas, git help stashmontrez clairement que git stash clearfait l'acte (cela ne m'a pas empêché de venir à SO en premier et de voter pour la réponse ... mais cela vous en dit plus sur moi que git: D)
Marco Massenzio
46

Il existe deux façons de supprimer une cachette:

  1. Si vous ne avez besoin d' une planque particulière, vous pouvez le supprimer avec: $ git stash drop <stash_id>.
  2. Vous pouvez supprimer tous vos stashes du repo avec: $ git stash clear.

Utilisez-les avec prudence, il est peut-être difficile de rétablir les masques une fois supprimés.

Voici l' article de référence .

Nesha Zoric
la source
2
La fermeture du terminal n'y est pour rien. git n'est pas un démon; il ne s'exécute que lorsque vous l'appelez. Il n'a aucune idée que vous avez fermé le terminal.
DylanYoung
32

cette commande vous permet de regarder toutes les modifications cachées.

git stash list

Voici la commande suivante, utilisez-la pour effacer toutes vos modifications cachées

git stash clear

Maintenant, si vous souhaitez supprimer l'une des modifications cachées de la zone de cachette

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

Remarque: git stash listvous permet d'obtenir l'index de la zone de stockage de git.

Vikrant Kashyap
la source
Il convient de mentionner qu'au moins pour le terminal intégré dans VSCode utilisant Windows 10, il l'est git stash drop 'stash@{index}'avec des apostrophes.
Oriol Miró
13

Je voulais garder quelques cachettes récentes, mais supprimer tout le reste.

Parce que tous les stashes sont renumérotés lorsque vous en déposez un, cela est en fait facile à faire avec while. Pour supprimer tous les stashes antérieurs à stash @ {19}:

while git stash drop 'stash@{20}'; do true; done
chaîne
la source
Est-ce que cela s'applique aux valeurs indexées introduites dans Git 2.11, où vous pouvez vous référer à la 3e cachette de la liste de cachettes en utilisant à la git stash pop 3place? Je voulais savoir si nous pouvions utiliser les whileboucles de boucle et de dépôt à l'aide de valeurs d'index.
tom_mai78101
J'adore la simplicité de cette belle solution élégante!
dominic
3

J'avais une autre exigence comme seulement quelques cachettes à supprimer, le code ci-dessous serait utile dans ce cas.

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

/ * supprimera de 5 à 8 index * /

Bala Krishnan
la source
essaifor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan
3
Notez que lorsque vous déposez, les masques restants remontent d'une place. Donc, si vous souhaitez supprimer de 5 à 8, vous devez soit compter à rebours, soit supprimer la cachette @ {5} quatre fois. Par exemple: for i in `seq 4`; do git stash drop 'stash@{5}'; done
warp
@ChrisMcCowan votre code manque également undo
steezeburger
3

si vous souhaitez supprimer la dernière cachette ou un index particulier -

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

si vous souhaitez supprimer tous les stash à la fois -

> git stash clear
>

> git stash list
>

Avertissement : une fois terminé, vous ne pouvez pas revenir en arrière

Shivam Bharadwaj
la source
1

Pour supprimer tous les stashes de plus de 40 jours, utilisez:

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

--dry-runCliquez sur Ajouter pour voir quels masques sont supprimés.

Voir https://stackoverflow.com/a/44829516/946850 pour une explication et bien plus de détails.

krlmlr
la source