3

我可以做git show <some-commit>:path/to/some/file,但我应该替换什么<some-commit>来获取文件的当前暂存版本?

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

4

1 回答 1

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. 如果文件根本不在索引中——没有暂存槽——<code>git status 会告诉您该文件已暂存以供删除。

(关于上下文:如果你有空间,我建议将git checkout-index每个阶段零索引文件都放入一个临时工作区。为了轻松测试所有索引文件是否都处于零阶段,请使用git write-tree,如果有文件则失败处于非零的暂存槽中。)

于 2020-03-25T17:36:55.623 回答