Як я можу видалити всі мої скриньки Git відразу?


1406

Як я можу видалити всі мої скриньки Git відразу?

Я маю на увазі, маючи на увазі, ввівши одну команду.

Відповіді:


2461

Наступна команда видаляє всі ваші скрині:

git stash clear

З документації по git :

clear

Видаліть усі приховані стани.

ВАЖЛИВЕ ПОПЕРЕДЖЕННЯ: Ці стани потім будуть піддані обрізанню, і відновлення може бути неможливим (...).


13
чому б не випасти приховану краплю?
користувач20358

137
@ User20358: Тому що stash drop( " Видалити один приховав стан зі списку тайник Якщо немає <тайник> не заданий, то він видаляє останній один (...) .. ") не дає відповіді на питання ( " Як я можу видалити всі з мій Git приховує відразу? ")?
Тадек

11
На додаток до згадуваної відповіді - git stash clearдля підтвердження, якщо все очищено, використовуйте -git stash list
kamal

2
@ jedd.ahyoung Це повинно мати ще 1000 грошей. Документацію на пошук gitпрактично неможливо знайти! git-scm.com/docs/git-stash
Drenai

11
@Ryan: git help <command>це найкращий спосіб отримати документацію (і це насправді досить добре). У цьому випадку git help stashчітко покажіть, що git stash clearробить діяння (це не завадило мені спершу прийти до ТА і відповісти на відповідь ... але це говорить вам більше про мене, ніж git: D)
Марко Массенціо

46

Існує два способи видалення сховища:

  1. Якщо вам більше не потрібен конкретний тайник, ви можете видалити його з: $ git stash drop <stash_id>.
  2. Ви можете видалити всі тайники з репо з: $ git stash clear.

Використовуйте обидва з обережністю, можливо, важко повернути колись видалені скрипки.

Ось довідкова стаття .


2
Закриття терміналу не має нічого спільного. git - не демон; він працює лише тоді, коли ви його зателефонуєте. Поняття не має, ти закрив термінал.
DylanYoung

31

ця команда дозволяє переглянути всі приховані зміни.

git stash list

Ось наступна команда використовує її для очищення всіх ваших прихованих змін

git stash clear

Тепер, якщо ви хочете видалити одну із прихованих змін із області сховища

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

Примітка: git stash listдає змогу отримати індекс із сховища області git.


Варто зазначити, що принаймні для інтегрованого терміналу в VSCode, що використовує Windows 10, він є git stash drop 'stash@{index}'апострофами.
Оріол Міро

13

Я хотів зберегти кілька останніх прихованих даних, але видалити все інше.

Оскільки всі стаси переставляються під час скидання однієї, це справді легко зробити з часом. Щоб видалити всі скрині, старіші за скриньку @ {19}:

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

Чи це стосується індексованих значень, введених у Git 2.11, де ви можете звернутися до 3-го сховища зі списку сховищ, використовуючи git stash pop 3замість цього? Мені хотілося дізнатись, чи можемо ми використовувати whileцикл і скидати скриньки за допомогою значень індексу.
tom_mai78101

Мені подобається простота цього, приємного елегантного рішення!
домініка

3

У мене була ще одна вимога, як-от лише кілька прихованих скриньок, які потрібно видалити, нижче код буде корисним у такому випадку.

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

/ * видалить з 5 до 8 індекс * /


спробуйтеfor iterator in `seq 5 8`; git stash drop stash@{$iterator}; done
Chris

3
Зауважте, що коли ви опускаєтесь, решта сходів рухається на 1 місце. Тож якщо ви хочете видалити від 5 до 8, вам потрібно або порахувати назад, або видалити скриньку @ {5} чотири рази. Наприклад: for i in `seq 4`; do git stash drop 'stash@{5}'; done
warp

@ChrisMcCowan у вашому коді також відсутня ado
steezeburger

3

якщо ви хочете видалити останню скриньку або будь-який конкретний індекс -

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

якщо ви хочете одразу вийняти всю скриньку -

> git stash clear
>

> git stash list
>

Попередження : Після закінчення ви не можете повернути назад свою сховище


1

Щоб видалити всі скриньки старші 40 днів, використовуйте:

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

Додайте, --dry-runщоб побачити, які скриньки видалено.

Дивіться https://stackoverflow.com/a/44829516/946850 для пояснення та багато іншого.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.