我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。

我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道stash应用将会改变什么。


当前回答

首先,我们可以使用git的stash列表来获取所有的stash项目:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

然后我们可以使用git stash show stash@{N}来检查特定的stash N下的文件。如果我们触发它,那么我们可能会得到:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

原因可能是shell正在消耗花括号,git看到stash@2而不是stash@{2}。为了解决这个问题,我们需要使用单引号作为大括号:

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.

其他回答

你可以用gitlen扩展查看VSCode中隐藏的更改

gitlen存储的截图

是的,查看修改内容的最好方法是保存在这样的文件中:

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

查看所有的变化在一个未弹出的stash:

git stash show -p stash@{0}

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

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

当这个问题第一次被问到的时候,这可能不是一个选项,但是,如果你使用PyCharm,你可以使用UnStash Changes工具(VCS->Git->UnStash Changes…)这允许你查看隐藏的更改列表,以及弹出,删除,清除或应用(如果需要,到一个新的分支):

并查看每个stash更改的文件:

以及每个文件的差异。在diff中,你可以从隐藏的变更中挑选单独的变更应用到工作分支中(使用左尖雪佛龙):

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

查找索引号:

Git藏匿清单

示例:git stash show -p 1