以下是在给定提交时获取文件内容的方法:
git show <commmit>:path/to/checked/in/file
列出文件所有修订版的一个好方法是:
git log [-fancy -git -log -flags] path/to/checked/in/file
但是,这是一个多步骤的过程。我必须使用后者来列出自己的一些提交,然后将其复制粘贴到前一个咒语中。
我想知道的是 git 中是否有任何语法允许我(类似于 HEAD^
的语义,HEAD~6
(指定此文件的较旧的第 n 个修订版。 HEAD:path/to/file^^
此文件的倒数第二个修订版。
典型用例:
diff deployed/somewhere/file <(git show HEAD:path/to/file)
而且我真的真的只是想用一些^
修改这个 shell 命令,以继续扫描file
的修订版。
这种方法实际上仍然可用。只是我可能要跋涉过去HEAD~35
,才能遇到file
中内容的第一次变化等等......
它没有语法 - 图形运算符直接处理提交图,而您的git log -- <path>
只是选择要显示的特定提交,同时仍然查看更大的图。
你可以做的是使用 git rev-list
,这是git log
的姊妹命令,用于脚本编写。 用于git log
的选项适用于git rev-list
,但git rev-list
仅生成提交哈希 ID 作为输出流。 因此:
git rev-list HEAD -- path/to/file > /tmp/commit_hash_list
获取git log
将显示的提交的哈希 ID,每行一个。 读取行,选择第 n 行,然后git show <hash>:<path>
提取文件。
(将HEAD
替换为您将酌情提供给git log
的分支名称、--all
或其他此类选项。 无论出于何种原因,git log
将默认使用 HEAD
,而git rev-list
需要一个起点。