以编程方式获取git中的藏匿处



我在项目中的"最古老"藏匿处是我需要不时重新应用的。(是的,这是有原因的,是的,这很糟糕,但是解决基本问题将比现在使用git stash更耗时。)

但是,最古老的藏匿处的数字中的数字最高,因此如果不首先使用git stash list来查看它是什么数字。

是否有某种方法可以使git打印当前持有的藏匿处,以便这样的东西始终打印出最后的藏匿处(在支持这种命令互动的外壳中)?

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 ...

这为您提供了藏匿条目的 number

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

但是,您必须提取1才能获得最后一个条目:-(多亏了@alfunx,可以在没有外壳算术的情况下完成:

> 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}作为存放的标识符。

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

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

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

,由于您的藏匿只是一个提交,因此您并不是严格来说需要使用藏匿机制。一旦您知道一次藏匿的sha,就可以每次通过sha樱桃挑选它,也可以在它上添加标签,以便您可以通过标签樱桃挑选它。

挑剔时,使用-n--no-commit标志。

最新更新