如何在Git中预览stash的内容?

840

我想检查一个stash,并找出如果将其应用到当前状态的工作树中会对其进行哪些更改。

我知道可以在stash上执行git diff,但这将显示工作树和stash之间的所有差异,而我只想知道stash apply将要更改的内容。


8
彩色差异输出:git stash show -p stash@{1} >~/.diff && vim ~/.diff(不必使用 vim,只要您的文本编辑器支持 diff 输出的语法高亮显示即可)。 - Trevor Boyd Smith
1
请注意,如果您使用的是Visual Studio,实际上您可以从Git更改窗口中双击存储条目以预览stash pop所做的更改。 - bobobobo
18个回答

1105

git stash show 命令可以展示最近一个存储区里面被修改的文件。你可以添加 -p 参数来显示差异。

git stash show -p

如果你感兴趣的stash不是最近的一个,那么在命令的末尾添加stash的名称:

git stash show -p stash@{2}

43
使用git stash show -p stash@{0}命令来查看特定的存储。数字0表示最近一次存储,1表示倒数第二次存储,以此类推。使用git stash list命令可以显示所有可用的存储。 - brita_
15
如果您正在使用PowerShell,您需要将stash名称放在引号中。(例如:git stash show -p 'stash@{0}' - scott-pascoe
2
如果您想将差异保存到文件中,请使用 git stash show -p stash@{0} > stash.txt - S_K
3
2019年,你只需输入git stash show [-p] [stash索引号]即可。 - needfulthing
显示剩余6条评论

124

查看当前的stash列表:

git stash list

你将看到这样的列表:

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

要查看任何其中一个储藏的差异:

git stash show -p stash@{n}

53

我喜欢使用 gitk 的图形化界面来可视化 git 存储库。你可以使用以下命令查看最后一个被隐藏的项目:

gitk stash

你也可以使用查看你的所有存储变更(由git stash list列出)。例如:

你可以查看任何一个已经存储的变更(如git stash list所列举的)。例如:

gitk stash@{2}
在下面的截图中,您可以看到储藏在左上方作为提交,它来自哪里以及何时出现在提交历史中,在右下角列出了修改的文件列表,并在左下角逐行显示差异。这一切都发生在储藏仍被隐藏的情况下。

6
您可以在命令行中提供多个stash@{X}值以一次查看更多结果,但我还没有找到在gitk中简单地说“显示所有存储条目”的方法。 - Brent Bradburn
7
"gitk stash" 似乎是 "gitk stash@{0}" 的简写。 - Leif Gruenwoldt
4
要在gitk中显示所有的存储,您可以使用 gitk \git stash list --pretty=format:%gd`` 命令,然后搜索 "WIP on" 来跳转到下一个存储。 - Ikar Pohorský
2
gitk --reflog 命令可以让你查看所有隐藏的修改,还有更多其他功能。 - Brent Bradburn
2
@IkarPohorský,我发布了一个新答案,其中包括cmd的说明,并且仅显示存储,而不是其他提交:https://dev59.com/TXA65IYBdhLWcg3w5zDB#57395752 - JBert
显示剩余5条评论

32

要查看未弹出的存储中的所有更改:

git stash show -p stash@{0}

要查看未弹出的存储中某个特定文件的更改:

git diff HEAD stash@{0} -- path/to/filename.php

如果一个人不记得文件名,它也适用于所有更改的文件。git diff HEAD stash@{0} - Simeon
仅为了清晰起见:-p--patch 的缩写。该选项来自于 git-diff。如果您更喜欢长格式,可以编写 git stash show --patch - Peterino

9
以下命令可用于提取暂存更改的差异,与任何其他暂存或提交或分支或HEAD进行比较。
git stash show
git show
git diff
git difftool

让我们看看如何使用上述提到的每个命令。

  1. git stash show

简单的命令git stash show可以给出文件更改的简要总结,但不会显示与当前HEAD之间更改的差异。

  1. git show

命令git-show用于查看各种类型的对象。

命令git-show不仅用于可视化存储更改,还用于查看一个或多个对象,如blob、tree、tag和commit。

  1. git diff

命令git-diff也是常用命令之一,用于显示提交之间、提交和工作树等之间的更改。

默认情况下,git diff将显示所选存储与(修改后的文件)仓库当前状态之间的差异,除非指定其他stash引用或commit。

要获取最顶部的 stash stash@{0}master 分支之间的差异:

git diff stash@{0} master

仅显示文件名而不是更改的差异:

git diff --name-only stash@{0} master

查看所选文件的不同存储之间的差异:
git diff stash@{0}^1 stash@{0} -- <filename>
  1. git difftool

命令git-difftool也可用于查找所选储藏和所选提交或分支或储藏之间的差异。

查看最新两个储藏之间的差异:

git difftool stash@{0} stash@{0}^1

git difftool --dir-diff stash@{0} stash@{0}^1

摘要:

从选定的存储中提取差异有用的命令: git stash showgit showgit diffgit difftool

使用命令git stash show查看差异。

git stash show -p stash@{0}

使用命令git show查看暂存区的更改。
git show stash@{1}

使用命令git diff查看最新的储藏和所选提交之间的差异。
git diff stash@{0} <commit-hash>

参考文献:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash


8
当这个问题第一次被提出时,可能没有这个选项,但是如果你使用PyCharm,你可以使用UnStash Changes工具(VCS->Git->UnStash Changes...)。这允许您查看存储的更改列表,并弹出、删除、清除或应用(如果需要,可以应用到新分支中): Unstash Changes Window 并查看每个存储的更改文件: Paths Affected Window 以及每个文件的差异。在差异中,您可以挑选要从存储的更改中应用到工作分支中的单个更改(使用向左指向的尖括号): enter image description here

谢谢!我使用PhpStorm或Intellij,我不知道这个功能。 - Jesús Franco

6

1
看起来是管理多个存储库的完美工具!您还可以使用 P!弹出删除 存储库。 - Ikar Pohorský
TUI的替代方案总是不错的选择,但对于那些已经习惯或更喜欢使用gitk的人来说,相对容易地修改它以显示所有存储内容。具体方法可以参考此链接:https://askubuntu.com/questions/487453/which-git-gui-can-show-list-of-files-inside-stash#comment1326106_487463。 - 1737973

6

是的,查看修改的最佳方法是将其保存在文件中,如下所示:

git stash show -p stash@{0} > stash.txt


5
git stash show -p <index number of stash stack>

查找索引号:

git stash list

示例:git stash show -p 1


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