以下是如何在给定的提交中获取文件的内容:
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
...
答案 0 :(得分:2)
没有语法 - 图形操作符直接在提交图上工作,而您的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 -th行,然后git show <hash>:<path>
提取文件。
(将HEAD
替换为您可以根据需要提供给--all
的分支名称或git log
或其他此类选项。无论出于何种原因,{{1}将默认使用git log
,而HEAD
需要一个起点。)