在混帐中,有没有办法显示未跟踪的存储文件,而不应用存储?
如果我运行git stash -u ,我可以隐藏未跟踪的文件。 但是,未跟踪的文件根本不会显示出来,用git stash show stash@{0} 。 有什么方法可以显示未跟踪的隐藏文件,而不应用隐藏? 
 未追踪的文件存储在隐藏提交的第三个父级。  (这实际上并没有logging,但是从引入了-u特性的提交,787513 …以及git-stash短语事情的其他文档的方式,或者通过执行git log --graph stash@{0} ) 
您可以通过以下方式查看存储的“未跟踪”部分:
 git show stash@{0}^3 
或者只是“未被跟踪”的树本身,通过:
 git show stash@{0}^3: 
或者树中特定的“未跟踪”文件,通过:
 git show stash@{0}^3:<path/to/file> 
 不幸的是,没有一个很好的方法来总结所有上演的+未分级+未跟踪与“当前”状态之间的差异。 即: git show stash@{0}不能被包括未跟踪的文件。 这是因为存储提交自身的树对象(称为stash@{0}: :)不包含来自第三个“unstaged”父级的任何更改。 
这是由于存储的方式被重新应用:跟踪的文件可以很容易地作为补丁应用,而未跟踪的文件只能在理论上被应用为“整个文件”。
您可以使用以下命令列出所有隐藏提交:
 git rev-list -g stash 
由于stash被表示为HEAD,索引和未跟踪文件的父级“根”提交的三向合并提交,未跟踪的文件stash可通过将上述输出pipe道化为以下内容来列出:
 git rev-list -g stash | git rev-list --stdin --max-parents=0 
以上的有用的应用:
只显示未跟踪的,隐藏的文件
 git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat 
  当然,删除--stat来查看文件的内容。 
find一个特定的文件
 git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern> 
Grep未跟踪的文件
 git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern> 
列出所有窗口的所有内容
 git rev-list -g stash | git rev-list --stdin | xargs git show --stat 
要查看存储中的所有文件(包括跟踪和未跟踪),我将这个别名添加到我的configuration中:
 showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -" 
它需要一个你想查看隐藏的参数 。 请注意,它仍将以两个背靠背列表的forms呈现。
  if...fi部分将bash参数 $ 1 更改为0,如果没有传递。 
要列出隐藏的未跟踪文件:
 git ls-tree -r stash@{0}^3 --name-only 
要显示所有未跟踪文件(包含内容)的完整区别:
 git show stash@{0}^3 
 这些命令读取最近(最近)的存储。 对于之前的存储,增加“stash @”后面的数字,例如从最后一个存储的第二个stash@{2} 。 
 这个工程的原因是, git stash创build一个每个隐藏的合并提交,可以被引用为stash@{0} , stash@{1}等。这个提交的第一个父母是隐藏时的头,第二个父级包含对跟踪文件的更改,第三个(可能不存在)对未跟踪文件的更改。 
这部分在“讨论”的手册中有所解释。
 解决方法:在git stash show -p文件之前暂存文件将使git stash show -p按预期工作。 
 git add . 
 git stash save 
  注意:这种方式也赋予function增加交互部分, 这里是如何 。 
  小心:确保您以前没有上过工作,否则您将无法区分它。 
 这可能是有用的。