如何删除git藏匿范围?

时间:2017-01-25 15:34:10

标签: git git-stash

我想从git stash list删除除最近的所有藏匿点。

E.g。我想在一个git命令中将隐藏 1 删除到 3

stash@{0}: On master: Test related changes
stash@{1}: On master: Tets
stash@{2}: On master: Integrate bunyan logging and http2
stash@{3}: On master: Integrate bunyan logging and http2

我查看了这个答案https://stackoverflow.com/a/5737041/3878940,但它适用于仅删除一个存储。是否有任何git命令可以删除stash es?

的范围

5 个答案:

答案 0 :(得分:15)

简答:不。

稍微长一点的答案:不,但这是微不足道的。您想要丢弃存储条1,2和3.当您丢弃存储#1时,存储条2和3分别变为存储条1和2。当您删除新的存储#1时,存储#2(最初为#3)将成为存储#1。因此,从#1开始,丢弃三个存储,只需将存储#1拖三次。

答案 1 :(得分:15)

如果要删除存储1到3,只需转到shell并键入以下命令:

for n in {1..3}
do
git stash drop stash@{1}   
done

输出

Dropped stash@{1} (79f369e9c4ce8348af8bd2da63f384cc7d02655e)
Dropped stash@{1} (744d2fc40e25f2db1bdc182d41f6eb9134957df4)
Dropped stash@{1} (7f9989207a675549866ab1fc7b15082eb4161e9f)

由于git stash使用堆栈结构,每次删除第n个索引时,堆栈索引减少1.所以最终,你最终会删除stashes 1到3。 所以,像这样你也可以删除一个长度为n的存储,只需迭代:

for n in {1..n}
do
git stash drop stash@{1}   
done

答案 2 :(得分:5)

我会在下面提供的答案中添加一些其他内容 如果您还想记录已删除存储的索引 您可以使用降序和$n,如下所示

for n in {3..1}; do git stash drop stash@{$n}; done;

输出将类似于..

Dropped stash@{3} (beeaf3629b53d612b1a3fabb7b0c4f77d17e9b71)
Dropped stash@{2} (5a687ca9a93b3190882a9af2c15134e75f063f41)
Dropped stash@{1} (e33dfc42d03166def5dbb60baa975efb21b27f07)

答案 3 :(得分:1)

如果您在 PowerShell 上使用 Git,您可以轻松获得它。有两种方法可以实现这一点。 (n 是藏品数量)

第一种方法,

for($i = 1; $i -lt n; $i++){ git stash drop "stash@{1}"}

第二种方法,

for($i = n-1; $i -gt 0; $i--){ git stash drop "stash@{$i}"}

我假设你有无数的藏匿处,你可以像这样得到藏匿处 (n) 的数量,

git stash list | measure-object -line

答案 4 :(得分:0)

假设您想删除所有旧存储,但第一个存储可以使用如下脚本:

for (( ; ; ))
do
    git stash drop stash@{1}
    Result = $?
    if [ Result != 0 ] 
    then
      break
    fi
done