在git log中显示所有的储藏(stash)

72

我希望在git log输出中看到所有的存储区。有人知道是否有办法实现吗?

编辑:我想要在日志中看到所有提交记录,包括stash提交记录。我尝试了以下命令:

git log --date-order --all

但它只返回最顶部的stash。我想看到代表其他stash的提交。

8个回答

60

您可以使用git stash list来显示所有的存储进度。也许您可以编写一个脚本来展示git stash listgit log,并将其与别名一起使用。


54

我来这里是想要做与 @jbialobr 相同的事情,读了之前的回答后进行了更深入的挖掘,得出了以下结果。

@msmt 的答案提供了存储库中所有备份的日志,您可以使用此信息获取哈希值并在 git 日志中使用。

git reflog show --format="%h" stash 可以给出所有备份的哈希值,然后可以将其传递给 git 日志命令,例如:

git log --date-order --all $(git reflog show --format="%h" stash)

我个人正在使用的完整命令是:

git log --oneline --graph --decorate --all $(git reflog show --format="%h" stash)

在 centos 上测试过 git 版本 2.5.1


8
SicoAnimal,你是一个很棒的人。你在 Stack Overflow 上的唯一贡献是 [迄今为止;一年多以来] 0 票的配置文件,肯定会得到赞赏。谢谢! - OJFord
1
我会使用xargs,因为它更易读且更易于处理:git reflog show --format="%h" stash | xargs git show - joachim
这确实将存储的内容显示为输出的一部分,但除了第一个标签外,没有其他标签,因此很难在日志中找到它们。 - Ken Williams

22

不确定您的意思。stash是一个分支,您可以使用git log -g stash列出所有的“stash”。


更好的是,它显示了所有的存储,但现在它不显示与存储相关的索引和未跟踪文件提交。命令git log -z --all --boundary可以显示它们,但当我添加-g stash时,这些提交就不再出现在日志输出中了。 - jbialobr
2
更详细地解释一下:stashrefs/stash 的缩写,它是所有存储头的列表。-g(或 --walk-refs)告诉 log 遍历引用列表中的项目,而不是从每个存储提交的修改历史记录。 - Joshua Goldberg

7
另一种简单的方法是使用 git reflog show stash 命令。

你看过我的编辑注释吗?我知道如何列出存储。我想在 git log 命令的输出中包含所有存储。 - jbialobr
1
@jbialobr 我想你的问题对我来说有点模糊不清。它看起来像是你知道如何记录所有提交,但你正在寻找如何只查看藏匿物。对于我而言,这种歧义在于“我想查看代表其他藏匿物的提交。”如果“git log --all”对您无效,那么我必须赞同@robinr所说的:“不确定你的意思是什么”。 - Michael

4

3

获取包含所有分支和所有存储的树状图:


扩展自SicoAnimal的超级有用的答案,这样您就不必输入所有内容(在没有任何Git UI的远程SSH会话中尤其有用)...


1. 设置Git别名:

# Short and sweet: hashes and graph with all branches and stashes
git config --global alias.l \
    '!sh -c '"'"' git log --oneline --graph --all --decorate $(git reflog show --format="%h" stash --) '"'"' '

# Same as above + dates and emails
git config --global alias.ll \
    '!sh -c '"'"' git log --graph --all --date=format:"'"%Y-%m-%d %H:%M"'" --pretty=format:"'"%C(yellow)%h%Creset%C(auto)%d%Creset %C(cyan)%cd%Creset %s %C(green)(%ce)%Creset"'" $(git reflog show --format="%h" stash --) '"'"' '

2. 使用别名:

# Short and sweet: hashes and graph with all branches and stashes
git l

# Same as above + dates and emails
git ll

3. 甜品般的结果:

请注意,您可以查看所有的存储(不仅是最新的那一个),在给定的提交中(用箭头表示)。

enter image description here


改进的空间:

# In case there are no stashes you get one-liner error message.
# The rest works as expected. Not sure how to fix it.
me@mymachine:~/projects/experiment/latest-angular-ten$ git l
fatal: bad revision 'stash'
* 00a696b (HEAD -> master) initial commit


参考资料:

如何创建带有参数的嵌套命令的Git别名?


1
如果你使用 git stash list --format=%H(如上面的评论中由 @tangle 建议的)当没有存储时就不会出现问题。 - undefined
太棒了!谢谢你的建议!我更新了我的答案:现在使用git stash list - undefined

2

完整命令:

git log --oneline --graph --all $(git stash list --format="%H")

这里的“list of heads of stashes”指的是暂存列表的头部:

git stash list --format="%H"

请注意,以上命令与Git相关,用于检索和显示版本控制的信息。


1
如果你可以承受图形化界面,可以看看gitk
它以一种视觉上不太吸引人但非常紧凑和有用的形式显示分支、标签、远程分支、隐藏等。通常与您的软件包管理器中的“git”软件包一起提供,并且需要安装“tk”(它使用的GUI工具包)才能正常运行。

默认情况下,它仅显示最顶部的存储区。如果您有办法使其显示更多内容,我很乐意听取建议。 - Neil Mayhew
1
@NeilMayhew,尝试设置“视图菜单”->“编辑视图...”->“生成更多提交以包含的命令”为git stash list --format=%H - undefined
1
@tangle 太棒了!谢谢你。完美地运作。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接