去除N以外的git stashes

时间:2016-11-30 22:13:48

标签: git git-stash

我定期存储git中的更改,并建立了相当长的存储列表(和“巧合”的巧合)。我目前的回购有68个藏匿处。有没有办法通过清除所有N个最近的藏匿处来清除藏匿列表?

我已经研究过的选项:

git stash clear - 删除整个存储列表

git stash drop <stash> - 删除特定的<stash>

第一个选项会删除整个存储列表,后者需要几十个命令。我正在寻找git rebase -i HEAD~N如何工作的方法,其中一个数字可以提供给命令。

2 个答案:

答案 0 :(得分:3)

使用一个小shell循环。请注意,当您放下 N 后,所有后续版本都会重新编号;当没有 N 的存储时,git stash drop stash@{N}失败(吵闹,什么都不做)。因此你可以使用:

while git stash drop stash@{30}; do done

在循环内部什么都不做,依赖于退出循环的失败。 (显然,将 N 替换为30所需的值。)

编辑:bash在循环中至少需要一个命令:

while git stash drop stash@{30}; do :; done

这使用内置的do-nothing :命令,因此看起来有点奇怪。如果您愿意,内置的true命令也可以:

while git stash drop stash@{30}; do true; done

(内置false命令也可以,但返回失败的退出代码,因此不适合可能设置-e的脚本。)

答案 1 :(得分:0)

我创建了一个简单的npm包,用于将git存储修剪为指定的数字。安装完成后,一个简单的git-trim-stash 10会将git个藏匿点修剪为最近的10个藏匿处。

该包非常轻量级,并且没有依赖关系。

有关npm site的更多信息。