git stash drop oldest stashes(比如最旧的 5 个 stashes)

git stash drop oldest stashes ( say oldest 5 stashes)

如何在一个语句中删除最旧的存储(比如最旧的 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}

感谢匿名用户的编辑,正确的命令如下所示:

git stash list | cut -f 1 -d : | tail -5 | sort -r | xargs -n 1 git stash drop

这里是 his/her 解释:

  • git stash list:列出你所有的藏品
  • cut -f 1 -d: Select 仅第一列(存储标识符,例如 stash@{29})
  • tail -5: 只保留最后五行
  • sort -r:反转行的顺序以首先删除最旧的存储(否则剩余的存储在每次删除后获得新名称)
  • xargs -n 1 git stash drop:对于管道中传输的每一行,执行git stash drop,因为git stash drop [可能]一次只支持一个stash。

感谢这位神秘的陌生人。

接受的答案很棒。如果你经常使用它,你可以将它添加到一个 shell 函数中,它会接受你想要删除的旧存储数量的参数:

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

然后你可以这样调用它,例如删除最后 10 个存储。

git-stash-prune 10