如何 git 显示暂存文件?

How to git show a staged file?

我可以 git show <some-commit>:path/to/some/file 但我要替换什么 <some-commit> 才能获得文件的当前暂存版本?

上下文:我正在编写一个预提交挂钩,我想 运行 检查暂存文件而不诉诸于隐藏未暂存的更改。有没有更好的方法?

使用git show :path/to/some/file.

"staged" 的文件表示文件的索引副本,它不同于某些其他副本,例如您可以通过 HEAD:path/to/some/file.

访问的当前提交副本

存储在索引中的文件有一个阶段编号,通常为零。 (暂存槽 1、2 和 3 在冲突合并期间使用。)

要引用名为 F 的文件的副本(在您的情况下 F = path/to/some/file),请使用修订说明符 :<em>number</em>:<em>F</em>。在本例中为 :0:path/to/some/file。当数字为零时(通常为零),您可以省略一个冒号和零,留下 :path/to/some/file.

请注意,当 git status 没有提及该文件时,它在索引中,只是 :0:path/to/some/file 与 [=11] 具有 相同的数据 =].如果文件根本不在索引中——没有暂存槽——git status 会告诉您文件已暂存以供删除。

(关于上下文:如果你有 space,我建议做一个 git checkout-index of every stage-zero-index-file into一个临时工作区。要轻松测试所有索引文件是否都处于零阶段,请使用 git write-tree,如果任何文件位于零以外的暂存槽中,它将失败。)