我可以执行git show <some-commit>:path/to/some/file
,但如何替换<some-commit>
以获得文件的当前暂存版本?
上下文:我正在编写一个预提交挂钩,我想对暂存文件进行检查,而不需要隐藏未暂存的更改。有更好的方法吗?
使用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
。要轻松测试是否所有索引文件都处于阶段零,请使用git write-tree
,如果有任何文件位于零以外的暂存槽中,则会失败。(