Jak mogę usunąć wszystkie moje skrytki Git jednocześnie?

1406

Jak mogę usunąć wszystkie moje skrytki Git jednocześnie?

Mówiąc konkretnie, wpisując jedno polecenie.

Rebekah Waterbury
źródło

Odpowiedzi:

2461

Następujące polecenie usuwa wszystkie skrytki:

git stash clear

Z dokumentacji git :

clear

Usuń wszystkie ukryte stany.

WAŻNE OSTRZEŻENIE: Stany te będą wówczas podlegać przycinaniu i ich odzyskanie może być niemożliwe (...).

Tadeck
źródło
13
dlaczego nie upuścić skrytki?
user20358
137
@ user20358: Bo stash drop(” Usuń pojedynczy stan ukryty z listy stash Kiedy nie <zapas> jest podana, to usuwa ostatnią jeden (...).. «) nie odpowiedzieć na pytanie (» Jak mogę usunąć wszystko z moje skrypty Git naraz? ”)?
Tadeck
11
Oprócz tego, co zaakceptowała wspomniana odpowiedź - git stash clearaby potwierdzić, czy wszystko zostało wyczyszczone, użyj -git stash list
kamal
2
@ jedd.ahyoung To powinno mieć kolejne 1000 głosów pozytywnych. Dokumentacja gitjest praktycznie niemożliwa do znalezienia! git-scm.com/docs/git-stash
Drenajów
11
@Ryan: git help <command>to najlepszy sposób na uzyskanie dokumentacji (i jest całkiem niezły). W tym przypadku git help stashwyraźnie pokaż, że git stash cleartak się dzieje (nie powstrzymało mnie to od pierwszego przyjścia do SO i poprawienia odpowiedzi ... ale to mówi o mnie więcej niż git: D)
Marco Massenzio
46

Istnieją dwa sposoby usunięcia skrytki:

  1. Jeśli nie potrzebujesz konkretnego zapas, można usunąć go z: $ git stash drop <stash_id>.
  2. Można usunąć wszystkie stashes z repo z: $ git stash clear.

Używaj obu z nich ostrożnie, może być trudno przywrócić usunięte skrytki.

Oto artykuł referencyjny .

Nesha Zoric
źródło
2
Zamknięcie terminalu nie ma z tym nic wspólnego. git nie jest demonem; działa tylko wtedy, gdy go nazwiesz. Nie ma pojęcia, że ​​zamknąłeś terminal.
DylanYoung
31

to polecenie umożliwia przeglądanie wszystkich ukrytych zmian.

git stash list

Oto następujące polecenie: użyj go, aby usunąć wszystkie ukryte zmiany

git stash clear

Teraz, jeśli chcesz usunąć jedną z ukrytych zmian z obszaru ukrytego

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

Uwaga: git stash listumożliwia uzyskanie indeksu z obszaru zapasów git.

Vikrant Kashyap
źródło
Warto wspomnieć, że przynajmniej dla zintegrowanego terminala w VSCode używającego Windows 10 jest to git stash drop 'stash@{index}'z apostrofami.
Oriol Miró
13

Chciałem zachować kilka ostatnich skrytek, ale usunę wszystko inne.

Poniewa wszystkie skrytki zostają przenumerowane po upuszczeniu, w rzeczywistości jest to łatwe do wykonania. Aby usunąć wszystkie skrytki starsze niż skrytka @ {19}:

while git stash drop 'stash@{20}'; do true; done
osnowa
źródło
Czy dotyczy to indeksowanych wartości wprowadzonych w Git 2.11, w których git stash pop 3zamiast tego można odwołać się do 3. skrytki z listy skrytek ? Chciałem wiedzieć, czy możemy używać whilepętli i upuszczać skrytki za pomocą wartości indeksu.
tom_mai78101
Uwielbiam prostotę tego, ładnego, eleganckiego rozwiązania!
dominujący
3

Miałem inne wymaganie, jak tylko kilka skrytek musi zostać usuniętych, w takim przypadku pomocny byłby kod poniżej.

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

/ * usunie indeks od 5 do 8 * /

Bala Krishnan
źródło
spróbujfor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris McCowan
3
Pamiętaj, że po upuszczeniu pozostałe skrytki przesuwają się o 1 miejsce w górę. Więc jeśli chcesz usunąć z 5 do 8, musisz albo liczyć wstecz, albo usunąć skrytkę @ {5} cztery razy. Na przykład: for i in `seq 4`; do git stash drop 'stash@{5}'; done
wypaczenie
@ChrisMcCowan brakuje także twojego kodudo
steezeburger
3

jeśli chcesz usunąć najnowszą skrytkę lub dowolny konkretny indeks -

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

jeśli chcesz usunąć wszystkie zapasy na raz -

> git stash clear
>

> git stash list
>

Ostrzeżenie : po zakończeniu nie możesz przywrócić swojej skrytki

Shivam Bharadwaj
źródło
1

Aby usunąć wszystkie skrytki starsze niż 40 dni, użyj:

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

Dodaj, --dry-runaby zobaczyć, które skrytki są usuwane.

Zobacz https://stackoverflow.com/a/44829516/946850, aby uzyskać wyjaśnienie i wiele więcej szczegółów.

krlmlr
źródło