Come posso eliminare tutte le mie scorte di Git contemporaneamente?


1406

Come posso eliminare tutte le mie scorte di Git contemporaneamente?

In particolare intendo, digitando un comando.

Risposte:


2462

Il seguente comando cancella tutti i tuoi stash:

git stash clear

Dalla documentazione git :

clear

Rimuovi tutti gli stati nascosti.

AVVERTENZA IMPORTANTE: quegli stati saranno quindi soggetti a potatura e potrebbe essere impossibile recuperarli (...).


13
perché non git stash drop?
user20358

137
@ user20358: Perché stash drop(" Rimuovere un singolo stato Stashed dalla lista scorta Quando nessun <scorta> è dato, esso rimuove l'ultimo uno (...).. ') non rispondere alla domanda (' Come posso cancellare tutto di il mio Git si blocca subito? ")?
Tadeck,

11
Oltre alla risposta accettata menzionata - git stash clear, per confermare se tutto è stato cancellato, utilizzare -git stash list
kamal

2
@ jedd.ahyoung Questo dovrebbe avere altri 1.000 voti. La documentazione per gitè praticamente impossibile da trovare! git-scm.com/docs/git-stash
Drenai

11
@Ryan: git help <command>è il modo migliore per ottenere la documentazione (e, in realtà, è abbastanza buono). In questo caso, git help stashmostra chiaramente che git stash clearfa l'atto (questo non mi ha impedito di venire prima a SO e di votare la risposta ... ma questo ti dice di più su di me di git: D)
Marco Massenzio,

46

Esistono due modi per eliminare uno stash:

  1. Se non è più necessario un particolare scorta, è possibile cancellarlo con: $ git stash drop <stash_id>.
  2. È possibile eliminare tutti i nascondigli del pronti contro termine con: $ git stash clear.

Usali entrambi con cautela, forse è difficile ripristinare gli stash una volta eliminati.

Ecco l' articolo di riferimento .


2
La chiusura del terminale non ha nulla a che fare con esso. git non è un demone; funziona solo quando lo chiami. Non ha idea che tu abbia chiuso il terminale.
DylanYoung,

31

questo comando consente di visualizzare tutte le modifiche nascoste.

git stash list

Ecco il comando seguente usalo per cancellare tutte le modifiche nascoste

git stash clear

Ora, se si desidera eliminare una delle modifiche nascoste dall'area di scorta

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

Nota: git stash listconsente di ottenere l'indice dall'area stash di git.


Vale la pena ricordare che almeno per il terminale integrato in VSCode utilizzando Windows 10, lo è git stash drop 'stash@{index}', con apostrofi.
Oriol Miró,

13

Volevo mantenere alcune sequenze recenti, ma eliminare tutto il resto.

Poiché tutti gli stash vengono rinumerati quando si rilascia uno, questo è in realtà facile da fare con while. Per eliminare tutti gli stash precedenti a stash @ {19}:

while git stash drop 'stash@{20}'; do true; done

Questo si applica ai valori indicizzati introdotti in Git 2.11, dove è possibile invece fare riferimento alla terza scorta dall'elenco di scorta git stash pop 3? Volevo sapere se possiamo usare il whileloop e rilasciare gli stash usando i valori dell'indice.
tom_mai78101

Adoro la semplicità di questa, bella soluzione elegante!
Dominic

3

Avevo un altro requisito come rimuovere solo pochi oggetti, in questo caso il codice sotto sarebbe stato utile.

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

/ * cancellerà da 5 a 8 indice * /


provarefor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan il

3
Si noti che quando si rilascia, gli stash rimanenti salgono di 1 punto. Quindi, se desideri rimuovere da 5 a 8, devi contare all'indietro o rimuovere stash @ {5} quattro volte. Ad esempio: for i in `seq 4`; do git stash drop 'stash@{5}'; done
ordito il

@ChrisMcCowan manca anche il tuo codice ado
steezeburger il

3

se desideri rimuovere l'ultima scorta o qualsiasi indice particolare -

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

se vuoi rimuovere tutta la scorta contemporaneamente -

> git stash clear
>

> git stash list
>

Avvertenza : una volta terminato, non è possibile ripristinare la scorta


1

Per eliminare tutti gli stash di età superiore a 40 giorni, utilizzare:

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

Aggiungi --dry-runper vedere quali elementi vengono eliminati.

Vedi https://stackoverflow.com/a/44829516/946850 per una spiegazione e molti più dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.