在混帐中,有没有办法显示未跟踪的存储文件,而不应用存储?
如果我运行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增加交互部分, 这里是如何 。
小心:确保您以前没有上过工作,否则您将无法区分它。
这可能是有用的。