如何 git 显示暂存文件?

par*_*hed 3 git git-show git-stage

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

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

tor*_*rek 7

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

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

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

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

请注意,当git status任何关于该文件说,这是在索引中,它只是:0:path/to/some/file具有相同的数据HEAD:path/to/some/file。如果该文件根本不在索引中(在没有暂存槽中),git status则会告诉您该文件已暂存以进行删除。

(关于上下文:如果您有空间,我建议git checkout-index每个stage-zero-index-file 放入一个临时工作区。要轻松测试所有索引文件是否都处于 stage 0,请使用git write-tree,如果有任何文件则失败位于零以外的暂存槽中。)