Как я могу удалить все мои тайники Git одновременно?

1408

Как я могу удалить все мои тайники Git одновременно?

В частности, я имею в виду, набрав в одной команде.

Ревекка Уотербери
источник

Ответы:

2463

Следующая команда удаляет все ваши тайники:

git stash clear

Из документации git :

clear

Удалить все спрятанные состояния.

ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ. Эти состояния будут подвергаться обрезке, и восстановление их может оказаться невозможным (...).

Tadeck
источник
13
почему бы не сделать git drop?
user20358
138
@ user20358: Потому что stash dropУдалить один припрятал состояние из списка тайник Если нет <тайник> не задан, то он удаляет последний один (...).. „) не дает ответа на вопрос (“ Как я могу удалить все из мой Git прячется сразу? ")?
Tadeck
12
В дополнение к упомянутому принятому ответу - git stash clearдля подтверждения, если все git stash list
снято
2
@ jedd.ahyoung Это должно иметь еще 1000 голосов. Документацию для gitпрактически невозможно найти! git-scm.com/docs/git-stash
Дренай
11
@Ryan: git help <command>это лучший способ получить документацию (и, на самом деле, это довольно хорошо). В этом случае git help stashясно покажите, что git stash clearделает этот поступок (это не помешало мне прийти первым на SO и выговорить ответ ... но это говорит вам обо мне больше, чем git: D)
Марко Массенцио,
46

Есть два способа удалить тайник:

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

Используйте оба из них с осторожностью, может быть трудно восстановить когда-то удаленные тайники.

Вот справочная статья .

Неша Зорич
источник
2
Закрытие терминала не имеет к этому никакого отношения. мерзавец не демон; он запускается только когда вы его называете. Понятия не имеет, что вы закрыли терминал.
DylanYoung
32

эта команда позволяет вам просмотреть все спрятанные изменения.

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

Я хотел сохранить несколько последних тайников, но удалить все остальное.

Поскольку все тайники перенумеровываются, когда вы их бросаете, это легко сделать с помощью while. Чтобы удалить все тайники старше, чем тайник @ {19}:

while git stash drop 'stash@{20}'; do true; done
деформироваться
источник
Относится ли это к индексированным значениям, представленным в Git 2.11, где git stash pop 3вместо этого вы можете ссылаться на 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
Крис
3
Обратите внимание, что при падении оставшиеся тайники перемещаются на 1 позицию вверх. Поэтому, если вы хотите удалить от 5 до 8, вам нужно либо считать в обратном направлении, либо удалить stash @ {5} четыре раза. Например: for i in `seq 4`; do git stash drop 'stash@{5}'; done
деформация
@ChrisMcCowan ваш код также отсутствуетdo
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 для объяснения и гораздо более подробной информации.

krlmlr
источник