如何保存/应用带有名称的存储?我不想在git存储列表中查找它的索引号。我尝试了git存储保存“my_stash_name”,但这只会更改存储描述,相应的git-apply“my_stash_name”不起作用。


当前回答

使用一个小型bash脚本来查找存储的数量。称之为“gitapply”:

NAME="$1"
if [[ -z "$NAME" ]]; then echo "usage: gitapply [name]"; exit; fi
git stash apply $(git stash list | grep "$NAME" | cut -d: -f1)

用法:

gitapply foo

…其中foo是所需存储的名称的子字符串。

其他回答

这里的聚会迟到了,但如果使用VSCode,一种快速的方法是打开命令调色板(CTRL/CMD+SHIFT+P)并键入“Pop-Stash”,您将能够按名称检索存储,而无需使用git CLI

使用一个小型bash脚本来查找存储的数量。称之为“gitapply”:

NAME="$1"
if [[ -z "$NAME" ]]; then echo "usage: gitapply [name]"; exit; fi
git stash apply $(git stash list | grep "$NAME" | cut -d: -f1)

用法:

gitapply foo

…其中foo是所需存储的名称的子字符串。

这个答案在很大程度上归功于克莱曼·斯拉维奇。我本来会对接受的答案发表评论,但我还没有足够的代表:(

您还可以添加一个git别名来查找stash ref,并在其他别名中使用它来显示、应用、删除等。

[alias]
    sgrep = "!f() { ref=$(git --no-pager stash list | grep "$1" | cut -d: -f1 | head -n1); echo ${ref:-<no_match>}; }; f"
    sshow = "!f() { git stash show $(git sgrep "$1") -p; }; f"
    sapply = "!f() { git stash apply $(git sgrep "$1"); }; f"
    sdrop = "!f() { git stash drop $(git sgrep "$1"); }; f"

注意ref=$(…)的原因;echo${ref:-<no_match>};模式是这样的,不会返回空白字符串,这将导致sshow、sapply和sdrop以最新的存储为目标,而不是像预期的那样失败。

要保存带有消息的存储:

git stash push -m "my_stash_name"

或者(自v2.16起已弃用):

git stash save "my_stash_name"

要列出隐藏内容:

git stash list

所有的储藏物都存储在一个堆栈中。


要弹出(即应用并删除)第n个存储:

git stash pop stash@{n}

使用git stash pop无法按名称弹出(即应用和删除)存储(请参见脚注1)。


要应用第n个存储:

git stash apply stash@{n}

要按名称应用隐藏:

git stash apply stash^{/my_stash_name}

脚注1:

有关申请,请参阅man git stash部分:与pop不同,可以是任何看起来像是由stash push或stash create创建的提交。可能的解决方法(在git版本2.27和2.31上测试):git stash pop$(git stash-list--prey=“%gd%s”|grep“my_stash_name”|head-1|gawk“{print$1}”)

使用git stash push-m aNameForYourStash来保存它。然后使用git stash list来了解要应用的存储的索引。然后使用git stash pop--index 0弹出存储并应用它。

注意:我使用的是git版本2.21.0.windows.1