别名:`git pop last`,用于`git stash pop [列表中的最后一个存储]`

Dav*_*Heq 4 git git-stash

这甚至可能吗?我想要一个更简单的命令git stash pop stash@{13},stash@{13}只是last意味着"列表中的最后一个藏匿"或"最古老的藏匿".

我知道我可以创建一个别名git popgit stash pop(我可以使用这样git pop stash@{13}),但我想简单的东西一样git pop last.我是否需要编写自己的脚本,或者有没有办法只使用git或别名?我主要使用Windows,但有时使用Linux.

Sco*_*don 5

建立@torek提供的提示,这可以让你得到你想要的存储的参考:

git reflog stash -- 2> /dev/null | tail -n 1 | cut -d ' ' -f 2 | cut -d ':' -f 1
Run Code Online (Sandbox Code Playgroud)

--确保你正在寻找一个版本,而不是一个路径.该2> /dev/null禁止显示错误的情况下有没有藏匿.

避免使用的替代方法cut(由@torek再次建议)是:

git log --walk-reflogs --format=%gd stash -- 2> /dev/null | tail -n 1
Run Code Online (Sandbox Code Playgroud)

因此,您可以像这样设置别名:

git config alias.pop-last "! git stash pop $(git reflog stash -- 2> /dev/null | tail -n 1 | cut -d ' ' -f 2 | cut -d ':' -f 1)"
Run Code Online (Sandbox Code Playgroud)

要么:

git config alias.pop-last "! git stash pop $(git log --walk-reflogs --format=%gd stash -- 2> /dev/null | tail -n 1)"
Run Code Online (Sandbox Code Playgroud)

No stash found.如果没有找到,这些命令中的任何一个都会给你一个很好的错误.

我已经测试过,这可以在Windows上的Git Bash提示符下运行.(它也适用于Linux.)

  • 一些小的缩短是可能的:`git reflog`只是`git log -g --oneline`,所以我们可以使用`git log -g --format =%gd stash`来避免需要`cut`.我也在考虑可能需要检查没有藏匿,但是我们可以通过将stderr重定向到/ dev/null来做到这一点:作为一种奇怪的积极奖励,如果没有stashes,`tail`输出什么并且`git stash pop`产生一个有用的错误信息.:-)我不确定`2>/dev/null`是否适用于Windows(我避免使用Windows). (3认同)