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

标签 git shell git-stash

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

但是要直接获取最旧的 stash ref,你可以使用这个:

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

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

关于git - 以编程方式获取 git 中的存储数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823386/

相关文章:

git - pull 是不可能的,因为你有未 merge 的文件,git stash 不起作用。不想犯

git - .git/log 的目的是什么

git - 是否可以从 Visual Studio 使用 git stash 命令

git - 如何删除与标签命名相同的 git 远程分支?

git - 如何在 *Windows* 中将 Mercurial 存储库转换为 Git...?

solaris 10 上的 git 客户端和依赖项

C中的cd命令用法

bash - awk 从开始匹配模式的最后一个匹配打印到结束模式

linux - 在目录的所有文件名中查找并用另一个单词替换

git - 如何查看 "git stash -u"的未跟踪文件