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

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


当前回答

显示所有存储

仅限文件名:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

所有存储中的完整文件内容:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

您将得到彩色的差异输出,您可以用空格(向前)和b(向后)来分页,并用q来关闭当前存储的分页器。如果你想把它放在一个文件中,然后追加>的存储。不同于命令。

其他回答

除了现有的答案,建议使用(显示第三个到最后一个藏匿物的差异)

git stash show -p stash@{2}

注意,在git-stash文档中,它是这样写的

存储也可以通过指定存储索引来引用(例如,整数n等价于stash@{n})。

因此,也可以使用(这相当于上面的命令)

git stash show -p 2

这也可以避免一些Powershell问题。

查看当前收藏列表:

git stash list

你会看到这样一个列表:

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

查看差异对任何这些存储:

git stash show -p stash@{n}

一些回答提到了git存储显示上的-p(或——patch)标志

然而,值得一提的是,在显示Git存储时,可以将此设置为默认行为。Git stash显示stash@{0}),或者使用Git配置:

git config --global stash.showPatch true

...或者在你的.gitconfig文件中:

[stash]
  showPatch = true

这使得git stash show在默认情况下表现得像git show。如果和当你只是想看到diffstat(即。添加/删除的行摘要),你仍然可以通过——stat标志看到(再次,像git show一样):

git stash show --stat stash@{0}

首先,我们可以使用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.

我用这个来查看我所有的存储与颜色差异高亮(在Fedora 21):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

(改编自Git:在不应用stash的情况下查看隐藏的内容)