如果我运行git stash -u,我可以存储未跟踪的文件.但是,所说的未跟踪文件根本没有出现git stash show stash@{0}.有没有办法在不应用存储的情况下显示未跟踪的存储文件?
Wil*_*mer 106
未跟踪的文件存储在存储提交的第三个父级中.(这实际上并没有记录,但是从提交引入-u功能,787513 ...... 的提交以及git-stash短语内容的其他文档的方式......或者只是通过执行git log --graph stash@{0})非常明显
您可以通过以下方式查看存储的"未跟踪"部分:
git show stash@{0}^3
Run Code Online (Sandbox Code Playgroud)
或者,只是"未跟踪"树本身,通过:
git show stash@{0}^3:
Run Code Online (Sandbox Code Playgroud)
或者,树中特定的"未跟踪"文件,通过:
git show stash@{0}^3:<path/to/file>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,没有好的方法来总结所有阶段+非阶段+未跟踪与"当前"状态之间的差异.即:git show stash@{0}不能包含未跟踪的文件.这是因为存储提交本身的树对象(称为)stash@{0}:不包含来自第三个"未暂存"父级的任何更改.
这是由于重新应用了藏匿的方式:跟踪文件可以很容易地作为补丁应用,而未跟踪的文件理论上只能应用为"整个文件".
Ste*_*eve 20
您可以使用以下命令列出所有存储提交:
git rev-list -g stash
Run Code Online (Sandbox Code Playgroud)
由于stashes表示为HEAD的3向合并提交,索引以及未跟踪文件的无父级"root"提交,因此可以通过将上述输出汇总到以下内容来列出未跟踪的文件存储:
git rev-list -g stash | git rev-list --stdin --max-parents=0
Run Code Online (Sandbox Code Playgroud)
以上有用的应用:
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
Run Code Online (Sandbox Code Playgroud)
当然,删除--stat以查看文件的内容.
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>
Run Code Online (Sandbox Code Playgroud)
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>
Run Code Online (Sandbox Code Playgroud)
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 18
但是,所说的未跟踪文件根本不会显示在
git stash show stash@{0}.
注意:自 Git 2.11(2016 年第 4 季度,theis OP 4 年后)开始,您只能使用其索引来引用 stash
git stash show 0
Run Code Online (Sandbox Code Playgroud)
git stash由于用 C 重写,最近出现了一个错误,已在 Git 2.22(2019 年第 2 季度)中修复
有没有办法在不应用隐藏的情况下显示未跟踪的隐藏文件?
为什么,是的,有,Git 2.32(2021 年第二季度,OP 后 9 年)。
git stash show 0
Run Code Online (Sandbox Code Playgroud)
“ git stash show” (男子)学会了选择性地显示藏匿处未追踪的部分。
请参阅Denton Liu ( )的提交 0af760e和提交 d3c7bf7(2021 年 3 月 3 日)。(由Junio C Hamano 合并 -- --在提交 f5c73f6,2021 年 3 月 22 日)Denton-L
gitster
stash show: 教导--include-untracked和--only-untracked签字人:刘丹东
可以通过( man )使用未跟踪的文件创建存储条目。
git stash push --include-untracked但是,由于未跟踪的文件存储在存储条目的第三个父级中,而不是存储条目本身,因此运行( man )不会将未跟踪的文件作为差异的一部分包含在内。
git stash show使用 时
--include-untracked,除了存储库和存储中的工作树之间有修改的路径之外,还会显示未跟踪的路径(如果存在,则记录在第三父级中)。可以手动制作格式错误的存储条目,其中存储条目中重复的未跟踪文件将掩盖跟踪文件。
在这种情况下,我们通过自定义回调来检测并出错unpack_trees():stash_worktree_untracked_merge()。此外,还教 stash
--only-untracked选项,该选项仅显示存储条目中未跟踪的文件。这与( man )
类似,但最好为其提供方便的抽象,以便用户不必考虑底层实现。git show stash^3
git stash现在包含在其手册页中:
Run Code Online (Sandbox Code Playgroud)'git stash' show [-u|--include-untracked|--only-untracked] [<diff-options>] [<stash>]
git stash现在包含在其手册页中:
--no-include-untracked当与
push和save命令一起使用时,所有未跟踪的文件也会被隐藏,然后用 清理git clean。与该
show命令一起使用时,将存储条目中未跟踪的文件显示为差异的一部分。
--only-untracked该选项仅对命令有效
show。
仅显示存储条目中未跟踪的文件作为差异的一部分。
并且您有一个与这些新选项相匹配的配置:
stash show: 学习stash.showIncludeUntracked签字人:刘丹东
之前的提交教导了(男人)。 用户可能希望能够始终启用该行为。 教授配置选项,该选项允许用户以与 类似的方式执行此操作。
git stash show --include-untracked--include-untrackedstash.showIncludeUntrackedstash.showPatch
git config现在包含在其手册页中:
stash.showIncludeUntracked如果将此设置为 true,
git stash show则不带选项的命令将显示存储条目的未跟踪文件。默认为 false。
git stash现在包含在其手册页中:
您可以使用
stash.showIncludeUntracked、stash.showStat和stash.showPatchconfig 变量来更改默认行为。
在 Git 2.32(2021 年第 2 季度)中,处理最近添加到存储未跟踪部分周围的“ git stash show” (man)选项的代码在未记录未跟踪部分的存储条目上使用这些选项时会出现段错误。
请参阅Denton Liu ( )提交的提交 1ff595d和提交 aa2b05d(2021 年 5 月 12 日)。(由Junio C Hamano 合并 -- --在提交 a8a2491中,2021 年 5 月 16 日)Denton-L
gitster
stash show:修复段错误--{include,only}-untracked签字人:刘丹东
当( man )或( man )在不包含未跟踪条目的存储上运行时,会发生段错误。
git stash show --include-untrackedgit stash show --only-untracked发生这种情况是因为我们不检查未跟踪的条目是否确实存在,而只是尝试盲目地取消引用它。
在实际尝试解除引用之前,请确保未跟踪的条目存在。
和:
请参阅Denton Liu ( )提交的 af5cd44(2021 年 5 月 21 日)。(由Junio C Hamano 合并 -- --在提交 378c7c6中,2021 年 5 月 22 日)Denton-L
gitster
stash showstash.showIncludeUntracked:即使diff给出选项也使用签字人:刘丹东
如果向( man )提供与如何显示差异相关的选项,则该命令将忽略配置变量,默认不显示任何未跟踪的文件。 这是不直观的行为,因为 diff 输出的格式以及是否显示未跟踪的文件是正交的。
git stash showstash.showIncludeUntracked
stash.showIncludeUntracked即使给出 diff 选项也可以使用。
当然,这仍然可以通过命令行选项覆盖。更新文档以明确说明在给出 diff 选项时哪些配置变量将被覆盖。
git config现在包含在其手册页中:
如果设置为
true,该git stash show命令将显示存储条目中未跟踪的文件。默认为
false.
git stash现在包含在其手册页中:
如果未
<diff-option>提供,默认行为将由stash.showStat, 和stash.showPatchconfig 变量给出。您还可以使用
stash.showIncludeUntracked设置是否--include-untracked默认启用。
要查看存储中的所有文件(已跟踪和未跟踪),我将此别名添加到我的配置中:
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 -"
Run Code Online (Sandbox Code Playgroud)
它需要一个参数来说明您要查看哪个存储。请注意,它仍将在两个背靠背列表中显示它。
如果没有传递,该if...fi部分会将 bash 参数$1更改为 0。
解决方法:暂存文件之前暂存文件git stash show -p将按预期工作。
git add .
git stash save
Run Code Online (Sandbox Code Playgroud)
注意:这种方式也提供了添加交互部分的能力,这里是.
注意:确保您之前没有上演过的作品,否则您将无法区分它。
这可能有用。