git stash drop:如何在不删除最新X的情况下删除旧的隐藏状态?

时间:2018-09-26 17:08:34

标签: git version-control git-stash

我已经发现的东西:

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 :(得分:4)

您可以尝试以下方法:

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

始终丢弃3,因为当您丢弃3时,现在4是3,依此类推,因此您继续丢弃stash @ {3}。无论哪种方式,都需要格外小心!

答案 1 :(得分:2)

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

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)