删除 git 个超过 N 的存储

Remove git stashes beyond N

我定期将更改存储在 git 中,并且建立了相当长的存储列表(巧合的是'stache)。我目前的回购有 68 个藏品。有没有办法通过清除除 N 个最近的存储之外的所有存储来清理存储列表?

我调查过的选项:

git stash clear - 删除整个隐藏列表

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

第一个选项将删除整个隐藏列表,后者将需要几十个命令。我正在寻找与 git rebase -i HEAD~N 工作原理类似的东西,其中可以向命令提供一个数字。

使用一点 shell 循环。请注意,当您删除第 N 个存储区时,所有后续存储区都会重新编号;当没有第 N 个存储时,git stash drop stash@{N} 失败(吵闹地,什么也不做)。因此你可以只使用:

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

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

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

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

这使用了内置的什么都不做 : 命令,所以看起来有点奇怪。如果您愿意,内置的 true 命令也可以使用:

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

(内置的 false 命令也可以工作,但是 returns 一个失败的退出代码,因此不适合可能设置了 -e 的脚本。)

我创建了一个简单的 npm 包,用于 trim 将 git 存储到指定数量。安装后,一个简单的 git-trim-stash 10 将 trim git 存储到最近的 10 个存储中。

该包非常轻巧,并且具有零依赖性。

有关 npm site 的更多信息。