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

问题描述 投票:0回答:3

我在项目中“最旧的”存储是我需要不时重新应用的东西。 (是的,这是有原因的,是的,这很糟糕,但是解决根本问题比现在仅使用

git stash
更耗时。)

但是,最旧的存储在列表中具有最高的编号,因此如果不先使用

git stash list
查看它是什么编号,我就无法应用它。

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

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

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

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

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

git shell git-stash
3个回答
13
投票

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

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

这将为您提供存储条目的数量

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

但是你必须减去

1
才能得到最后一个条目:-(感谢@alfunx,不需要shell算术就可以完成:

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

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

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

这适用于您的情况,因为

git stash apply
支持普通数字和
stash@{$NUMBER}
作为存储的标识符。


8
投票

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

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

git stash list

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

4
投票

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

挑选时,请使用

-n
--no-commit
标志。

© www.soinside.com 2019 - 2024. All rights reserved.