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

Bla*_*bam 6 git version-control git-stash

我已经发现了什么:

git stash list
Run Code Online (Sandbox Code Playgroud)

...列出我所有的藏品。

git stash show -p stash@{0} --name-only
Run Code Online (Sandbox Code Playgroud)

列出该存储中的所有文件(此处为位置 0 处的最新存储)。

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

git stash clear
Run Code Online (Sandbox Code Playgroud)

...或像这样删除单个存储(随后删除包含 87 个存储的存储):

git stash drop stash@{87}
Run Code Online (Sandbox Code Playgroud)

不过我想删除存储 3-107。带着冒险的猜测,我尝试了:

git stash drop stash@{3-107} -- does not work
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Ada*_*dam 6

编辑:我们必须向后循环,因为删除存储会更改所有存储的索引。

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

$ git stash drop stash@\{{4..1}\}
Too many revisions specified: 'stash@{4}' 'stash@{3}' 'stash@{2}' 'stash@{1}'
Run Code Online (Sandbox Code Playgroud)

您可以通过 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)
Run Code Online (Sandbox Code Playgroud)

  • 危险,危险!!!当您删除 stash@{1} 时,它看起来不错,但现在其他存储已经调整了编号。 (6认同)