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

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


当前回答

我用这个来查看我所有的存储与颜色差异高亮(在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的情况下查看隐藏的内容)

其他回答

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

gitlen存储的截图

一些回答提到了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}

我喜欢gitk可以准确地显示哪些是未跟踪的或位于索引中的,但默认情况下,它将在当前分支上的所有其他提交中间显示那些隐藏的“提交”。

诀窍是像下面这样运行gitk:

gitk "stash@{0}^!"

(引用是为了使它在Powershell中工作,但这样它仍然可以在其他shell中工作。)

如果你在gitrevisions帮助页面中查找这个语法,你会发现以下内容:

r1 ^ !符号包括commit r1,但不包括它的所有父类。就其本身而言,这个符号表示单个提交r1。

这显然会将gitk置于这样一种模式,即只显示所选提交的直接父节点,这正是我所喜欢的。


如果你想进一步列出所有的存储,那么你可以运行这个:

gitk `git stash list '--pretty=format:%gd^!'`

(反撇号内的单引号是为了安抚Bash,否则它会抱怨感叹号)

如果您在Windows上并使用cmd或Powershell:

gitk "--argscmd=git stash list --pretty=format:%gd^!"

查看当前收藏列表:

git stash list

你会看到这样一个列表:

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

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

git stash show -p stash@{n}

我用这个来查看我所有的存储与颜色差异高亮(在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的情况下查看隐藏的内容)