git stash drop:如何删除旧的隐藏状态而不删除最新的X?

git stash drop:如何删除旧的隐藏状态而不删除最新的X?,git,version-control,git-stash,Git,Version Control,Git Stash,我已经发现的: git stash list 。。。为了列出我所有的藏品 git stash show -p stash@{0} --name-only 列出该存储中的所有文件(此处为位置0处的最新存储) 现在我有一个项目,有数百个旧的隐藏更改,这些更改将不再需要。我知道我可以把它们全部删除: git stash clear 。。。或者像这样删除单个存储(随后删除包含87个存储的存储): 但是我想删除3-107号仓库。带着一种冒险的猜测,我试着: git stash drop stash@

我已经发现的:

git stash list
。。。为了列出我所有的藏品

git stash show -p stash@{0} --name-only
列出该存储中的所有文件(此处为位置0处的最新存储)

现在我有一个项目,有数百个旧的隐藏更改,这些更改将不再需要。我知道我可以把它们全部删除:

git stash clear
。。。或者像这样删除单个存储(随后删除包含87个存储的存储):

但是我想删除3-107号仓库。带着一种冒险的猜测,我试着:

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

我该怎么做呢?

编辑:我们必须向后循环,因为删除一个隐藏会更改所有隐藏的索引

git stash drop
一次不接受多个修订

$ git stash drop stash@\{{4..1}\}
Too many revisions specified: 'stash@{4}' 'stash@{3}' 'stash@{2}' 'stash@{1}'
您可以通过shell中的一个循环来实现这一点。例如在
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)
你可以试试这个:

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

总是放下3,因为当你放下3的时候,原来的4变成了现在的3,依此类推,所以你一直在放下隐藏的东西。无论哪种方法都要小心使用

危险,危险!!!当你放下贮藏@{1}时,它看起来很好,但现在其他贮藏已经调整了编号。有趣!我会做一些测试,并提供一个安全的解决方案。我希望向后循环是安全的?我添加了我自己的配方,以防万一。@eftshift0修复了!我在{107..3}do git stash drop stash@{$I}中为I做了
;完成了
,对我来说效果很好。我认为这两种解决方案现在都一样好了?@phd的可能重复非常相似,但不是真正的重复,因为我问如何删除除最新X以外的所有X,而不是如何删除最新的X。不应该将其标记为重复,因为这里的答案不那么神秘,也很抱歉,如果这个问题是noobish,那么这个循环在所有操作系统的bash中都有效吗?或者它是什么样的bash语言?在bash上有效。。。。不知道其他口译员,比如ksh或dash或其他什么。
i=3; while [ $i -lt 104 ]; then git stash pop stash@{3}; i=$(( $i + 1 )); done