我在项目中“最古老”的存储是我需要不时重新应用的东西。 (是的,这是有原因的,是的,这很可怕,但是解决根本的问题比现在仅使用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+'
...但是那太可怕了,所以我想知道是否有更简单的事情。
答案 0 :(得分:7)
使用以下存储库提供一个小型示例存储库:
> 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}
作为隐藏的标识符。
答案 1 :(得分:3)
由于存储只是一个提交,因此严格来讲,您不需要使用存储机制。一旦知道了隐藏项的SHA,就可以每次通过SHA对其进行樱桃选择,或在其中添加标签,以便按标签对其进行选择。
选择樱桃时,请使用-n
或--no-commit
标志。
答案 2 :(得分:3)
给定的解决方案过于复杂。
一个简单的解决方案就是计算 git stash list
给出的行数
$ git stash list | wc -l
65