git stash drop: как удалить старые спрятанные состояния, не удаляя последний X? - PullRequest
0 голосов
/ 26 сентября 2018

Что я уже обнаружил:

git stash list

... для перечисления всех моих тайников.

git stash show -p stash@{0} --name-only

Чтобы вывести список всех файлов в этом тайнике (здесь последний тайник в позиции0).

Теперь у меня есть проект с сотнями старых спрятанных изменений, которые больше не понадобятся.Я знаю, что могу удалить их все:

git stash clear

... или удалить отдельные тайники, как это (удаляет тайник с 87 тайниками впоследствии):

git stash drop stash@{87}

Однако я бы хотелудалить тайники 3-107.С рискованным предположением я попытался:

git stash drop stash@{3-107} -- does not work

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете попробовать это:

i=3; while [ $i -lt 104 ]; then git stash pop stash@{3}; i=$(( $i + 1 )); done

Всегда отбрасывайте 3, потому что когда вы опускаете 3, то теперь 4 равно 3 и так далее, так что вы продолжаете сбрасывать тайник @ {3}.В любом случае используйте с особой осторожностью!

0 голосов
/ 26 сентября 2018

Редактировать: Нам нужно выполнить цикл в обратном направлении, потому что удаление тайника изменяет индекс всех тайников.

git stash drop не принимает более одной ревизии за раз;

$ git stash drop stash@\{{4..1}\}
Too many revisions specified: 'stash@{4}' 'stash@{3}' 'stash@{2}' 'stash@{1}'

Вы можете достичь этого с помощью цикла в вашей оболочке.Например, в bash;

$ for i in {4..1}; do
>     git stash drop stash@{$i};
> done
Dropped stash@{4} (175f810a53b06da05752b5f08d0b6550ca10dc55)
Dropped stash@{3} (3526a0929dac4e9042f7abd806846b5d527b0f2a)
Dropped stash@{2} (44357bb60f406d29a5d39ea0b5586578223953ac)
Dropped stash@{1} (c97f46ecab45846cc2c6138d7ca05348293344ce)
...