以编程方式获取 git 中的存储数量

Programmatically get number of stashes in git

我在项目中的 "oldest" 存储是我需要不时重新申请的东西。 (是的,这是有原因的,是的,这很糟糕,但解决根本问题比现在只使用 git stash 更耗时。)

然而,最旧的藏品在列表中的编号最大,所以我必须先使用 git stash list 查看它的编号才能应用它。

有什么方法可以让 Git 打印它当前持有的存储数量,这样像这样的东西总是会打印最后一个存储(在支持这种命令的 shell 中-插值)?

git stash apply $(git stash <count-command>)

我意识到我可以使用这样的东西:

 git stash list | tail -1 | awk '{print }' | grep -oP '\d+'

...但这太可怕了,所以我想知道是否有更简单的方法。

给定一个包含以下存储的小型示例存储库:

> git stash list
stash@{0}: WIP on foo/master: d9184b5 ...
stash@{1}: WIP on foo/master: d9184b5 ...

这为您提供了 个隐藏条目:

> git rev-list --walk-reflogs --count refs/stash
2

但是你必须减去 1 才能得到最后一个条目:-( 感谢@alfunx 可以在没有 shell 算术的情况下完成:

> git rev-list --walk-reflogs --count --skip 1 refs/stash
1

但是要直接获取最旧的存储引用,您可以使用这个:

> git log --walk-reflogs --pretty="%gd" refs/stash | tail -1
stash@{1}

这适用于您的情况,因为 git stash apply 支持纯数字和 stash@{$NUMBER} 作为存储的标识符。

由于你的存储只是一个单一的提交,严格来说你不需要使用存储机制。一旦你知道你的藏品的 SHA 一次,你就可以每次都通过 SHA 挑选它,或者给它添加一个标签,这样你就可以通过标签挑选它。

挑选樱桃时,使用 -n--no-commit 标志。

给出的解决方案过于复杂。

一个简单的解决方案就是计算git stash list

给出的行数
$ git stash list | wc -l
     65