Git 列出具体来自一个分支的藏品

Git list out stashes specifically from one branch

我有 2 个分支:Section9 和 s9feature。在分支 s9feature 上,我创建了 stash,然后我在 Section9 分支上创建了 checkout,并希望查看具体来自 s9feature 的隐藏列表。我知道我可以 运行 git stash listgit reflog stash 但我需要特别列出来自 s9feature

的藏匿处

存储基于提交,而不是分支。但是,存储的默认“标题”——实际上只是它的提交消息,因为每个存储只是一个不在 any branch1[=35 上的提交=]—WIP on <em>branch</em> 的形式。因此,您可以 运行 git stash list,然后在其输出上使用 filter 来提取包含分支名称的任何行。例如:

git stash list | grep s9feat

(记住 grep 搜索任何子字符串,所以只要 s9feat 足够长以区分有趣的隐藏和不感兴趣的隐藏,这就是我们在这里所需要的)。

如果您更改了藏品的标题,当然,这将不起作用。由于分支名称没有意义且与 Git 无关,并且仅出现在 human-oriented message 部分,因此您需要更复杂的东西才能找到有趣的存储—除非,也就是说,您已经将有趣的部分放入这些更改后的标题中。


1从技术上讲,每个存储至少 两次 次提交。使用特定选项创建的存储添加 third 提交以保存未跟踪的文件。

However, the default "title" of a stash has the form WIP on branch

问题是:它不显示创建它的分支的完整名称。不在 Git 2.36(2022 年第二季度)

之前

"git checkout -b"(man) branch/with/multi/level/name && git stash(man) 只记录了分支名称的最后一级组成部分,已用Git 2.36 ( 2022 年第二季度)。

参见 commit ceaf037 (24 Jan 2022) by Glen Choo (chooglen)
(由 Junio C Hamano -- gitster -- in commit 11da0a5 合并,2022 年 3 月 6 日)

stash: strip "refs/heads/" with skip_prefix

Reported-by: Kraymer
Reported-by: Daniel Hahler
Helped-by: Jeff King
Signed-off-by: Glen Choo

When generating a message for a stash, "git stash"(man) only records the part of the branch name to the right of the last /".
e.g.
if HEAD is at "foo/bar/baz", "git stash" generates a message prefixed with WIP on baz: instead of WIP on foo/bar/baz:.

Fix this by using skip_prefix() to skip "refs/heads/" instead of looking for the last instance of "/".