超过N个的git存储区可以被删除

4
我经常在git中存储更改并积累了相当长的存储列表(巧合的是,也有“stache”)。我的当前repo有68个存储。是否有一种方法可以通过清除除N个最近的存储以外的所有存储来清理存储列表?
我已经研究过的选项:
git stash clear - 删除整个存储列表
git stash drop - 删除特定的 第一个选项将删除整个存储列表,而后一个选项需要执行几十个命令。我正在寻找类似于git rebase -i HEAD〜N的工作方式,其中可以向命令提供数字的解决方案。
2个回答

4

使用一个小的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命令也可以工作,但会返回失败的退出代码,因此不适用于可能设置了-e的脚本。)

这太棒了。我试图将其添加为别名,以便我可以运行“git rs 100”,其中rs是别名,100是第N个存储。因此,在我的别名文件中,我有: alias rs = "!f() { while git stash drop stash@{$1}; do done }; f"。但是这不起作用。我收到一个错误:“syntax error near unexpected token `done'”。 - Jeff
1
@Jeff:一些shell(特别是bash)需要循环内部的命令。无操作的“:”命令就足够了:while ...; do :; done - torek

0

我创建了一个简单的npm包,用于将git存储库修剪到指定数量。一旦安装,只需运行git-trim-stash 10即可将git存储库修剪为最近的10个存储库。

该软件包非常轻巧,没有任何依赖关系。

有关npm网站的更多信息。


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