撤销最早的储藏(例如最早的5个储藏):git stash drop oldest stashes

4
我该如何在一条语句中删除最旧的存储区(比如最旧的5个存储区),而不是像下面这样操作:
git stash drop stash@{3}
git stash drop stash@{4}
git stash drop stash@{5}
git stash drop stash@{6}
git stash drop stash@{7}
2个回答

7
感谢匿名用户的编辑,正确的命令应该是这样的:
git stash list | cut -f 1 -d : | tail -5 | sort -r | xargs -n 1 git stash drop

这里是他/她的解释:
  • git stash list: 列出所有的存储区
  • cut -f 1 -d: 只选择第一列(例如 stash@{29} 的存储标识符)
  • tail -5: 仅保留最后五行
  • sort -r: 反转行的顺序以删除最老的存储区(否则在每次删除后剩余的存储区会获得新名称)
  • xargs -n 1 git stash drop: 对于通过管道传输的每一行,执行 git stash drop,因为 git stash drop[可能]只支持一个存储区。
感谢神秘陌生人。

谢谢你的回答!有一个建议:也许可以使用tac而不是sort -r来反转行,以处理如果有超过9个存储。 - dave jones

2

这个回答非常好。如果你经常使用它,你可以像这样将其添加到shell函数中,该函数将接受一个参数来指定你想要删除的旧stash数量:

git-stash-prune() {
    git stash list | cut -f 1 -d : | tail -"$1" | sort -r | xargs -n 1 git stash drop 
}

例如,你可以像这样调用它,删除最后10个存储。
git-stash-prune 10

1
这对我帮助很大!!!谢谢@lacostenycoder!!因为我喜欢尝试,所以我有超过200个存储,但是一年左右后有些太旧了不能保留... - SoftDev30_15
@SoftDev30_15 很高兴你觉得这有用。我在这里还有一堆我常用的实用终端函数,如果你发现其中任何一个有用请在这里告诉我 - lacostenycoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接