Como posso excluir todos os meus stash do Git de uma só vez?


1406

Como posso excluir todos os meus stash do Git de uma só vez?

Especificamente, quero dizer, digitando um comando.

Respostas:


2462

O comando a seguir exclui todos os seus stashes:

git stash clear

Na documentação do git :

clear

Remova todos os estados ocultos.

AVISO IMPORTANTE: Esses estados estarão sujeitos a poda e podem ser impossíveis de recuperar (...).


13
por que não git stash drop?
user20358

137
@ user20358: Porque stash drop(" Remover um único estado Stashed da lista esconderijo Quando nenhuma <estoque> é dado, ele remove o mais recente (...).. ') não responder à pergunta (' Como posso apagar tudo de meu Git esconde de uma só vez? ")?
Tadeck 02/09

11
Além do que a resposta aceita mencionou - git stash clear, para confirmar se tudo desmarcado, use -git stash list
kamal

2
@ jedd.ahyoung Isso deve ter mais 1.000 votos positivos. A documentação para gité praticamente impossível de encontrar! git-scm.com/docs/git-stash
Drenai

11
@ Ryan: git help <command>é a melhor maneira de obter documentação (e, na verdade, é muito bom). Nesse caso, git help stashmostre claramente que git stash cleara ação (isso não me impediu de chegar ao SO primeiro e aprovar a resposta ... mas isso me diz mais sobre mim do que git: D)
Marco Massenzio

46

Existem duas maneiras de excluir um stash:

  1. Se você não precisa mais de um estoque particular, você pode excluí-lo com: $ git stash drop <stash_id>.
  2. Você pode apagar todos os seus esconderijos do repo com: $ git stash clear.

Use os dois com cautela, talvez seja difícil reverter os stashes excluídos.

Aqui está o artigo de referência .


2
Fechar o terminal não tem nada a ver com isso. git não é um daemon; só funciona quando você chama. Não faz ideia que você fechou o terminal.
DylanYoung

31

este comando permite que você procure todas as alterações ocultas.

git stash list

Aqui está o comando a seguir, use-o para limpar todas as alterações ocultas

git stash clear

Agora, se você deseja excluir uma das alterações ocultas da área oculta

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

Nota: git stash listpermite que você obtenha o índice da área de stash do git.


Vale ressaltar que pelo menos para o terminal integrado no VSCode usando o Windows 10, é git stash drop 'stash@{index}'com apóstrofos.
Oriol Miró

13

Eu queria manter alguns esconderijos recentes, mas excluir todo o resto.

Como todos os stashes são renumerados quando você solta um, isso é realmente fácil de fazer enquanto. Para excluir todos os stash anteriores ao stash @ {19}:

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

Isso se aplica aos valores indexados introduzidos no Git 2.11, onde você pode consultar o terceiro stash da lista de stash usando git stash pop 3? Eu queria saber se podemos usar o whileloop e soltar stashes usando valores de índice.
tom_mai78101 14/10/1919

Adoro a simplicidade desta, solução elegante e agradável!
dominic 17/04

3

Eu tinha outro requisito, pois apenas alguns stash precisavam ser removidos; o código abaixo seria útil nesse caso.

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

/ * excluirá de 5 a 8 índices * /


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

3
Observe que, quando você solta, os stashes restantes sobem 1 ponto. Portanto, se você deseja remover de 5 a 8, precisa contar para trás ou remover stash @ {5} quatro vezes. Por exemplo: for i in `seq 4`; do git stash drop 'stash@{5}'; done
warp

@ChrisMcCowan também está faltando um códigodo
steezeburger 25/02

3

se você deseja remover o esconderijo mais recente ou em qualquer índice específico -

gota do stash do git 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 você deseja remover todo o estoque de uma só vez -

> git stash clear
>

> git stash list
>

Aviso : Uma vez feito, você não pode reverter seu estoque


1

Para excluir todos os stashes com mais de 40 dias, use:

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

Adicione --dry-runpara ver quais stashes foram excluídos.

Consulte https://stackoverflow.com/a/44829516/946850 para obter uma explicação e muito mais detalhes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.