在没有存储的情况下按号码引用git stash @ {i}

时间:2018-05-30 18:54:17

标签: git bash-completion

我正在广泛使用git stashes。有时,当乍一看简单的stash@{3}足够时,输入3会变得很烦人。是否有可能以某种方式使用较短的参考?

我知道有shell别名的解决方案。制作像

这样的别名
sshow = "!f { git stash show @{$@}; }; f"

允许使用git sshow 1。如果正确扩展git stash show,它甚至允许将其他参数传递给$@

但是,在这种情况下,git自动完成功能不起作用:当键入git stash show stash@{0} --<Tab><Tab>时,它应显示所有git diff个选项,但此处它对底层命令一无所知。

是否有其他方法可以制作此类别名以保留原始git diff完成情境?

2 个答案:

答案 0 :(得分:3)

是的,从v2.11开始,这是内置于Git的。您只能通过索引引用任何存储。例如,要在索引2处应用存储,您可以键入

git stash apply 2

答案 1 :(得分:0)

Git 2.22(2019年第二季度),git stash用C重写。

请参见commit 7906af0commit 90a4627commit 8d8e9c2Johannes Schindelin (dscho)(2019年2月25日)。
参见commit 40af146commit 48ee24acommit ef0f0b4commit 64fe9c2commit 1ac528ccommit d553f53commit d4788afcommit 41e0dd5,{ {3}},commit dc7bd38commit 130f269commit bef55dccommit dac566c(2019年2月25日)由commit ab8ad46撰写。
请参见Paul-Sebastian Ungureanu (weekly-digest[bot])commit c4de61dcommit 577c199commit 4e2dd39commit 8a0fc8d(2019年2月25日)。
(由Joel Teichroeb (klusark)Junio C Hamano -- gitster --中合并,2019年4月22日)

然后...“ git stash show 23可以正常工作,但是在用C重写后不再有用;此回归已在Git 2.23(2019年第三季度)中得到纠正。

请参见commit e36adf7commit 63b50c8(2019年6月15日)。
(由Thomas Gummerer (tgummerer)Junio C Hamano -- gitster --中合并,2019年7月9日)

  

隐藏:修复显示引用隐藏索引的问题

     

commit 99af5be中将“ stash show”转换为C(“ stash:转换   显示为内置”,2019年2月25日,Git v2.22.0-rc0),“ git stash show <n>”,其中n是   如果n不是文件或有效的修订版,则存储的索引已损坏   本身。

     

'stash show'接受任何标志'git diff'来更改输出格式。
  在内部,我们使用'setup_revisions()'来解析这些命令行标志。
  当前,我们将整个argv传递到'setup_revisions()',其中包括隐藏索引。

     

但是,由于在大多数情况下,存储索引不是有效的修订版或工作树中的文件,因此,如果我们使用以下形式的“”,则此“ setup_revisions()”调用(以及整个命令)将以失败告终git stash show'。

     

仅将整个argv传递给'setup_revisions()',而不是传递   标记(和命令名称)通过,但不包含隐藏项   参考。
  隐藏参考已在“ get_stash_info()”中解析(并验证)。

     

此单独的解析也意味着我们当前确实在生成   如果命令成功,则输出正确。