代码之家  ›  专栏  ›  技术社区  ›  Blackbam

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

  •  1
  • Blackbam  · 技术社区  · 6 年前

    git stash list
    

    ... 把我所有的藏品都列出来。

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

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

    git stash clear
    

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

    git stash drop stash@{87}
    

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

    我该怎么做?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Adam    6 年前

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

    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)
    
        2
  •  4
  •   Blackbam    6 年前

    你可以试试这个:

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

    总是放弃3,因为当你放弃3的时候,原来的4变成了现在的3,以此类推,所以你一直在放弃隐藏的@{3}。不管怎样 小心使用!