git连续显示文件的旧版本

时间:2018-04-11 16:49:50

标签: git

以下是如何在给定的提交中获取文件的内容:

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 ...

1 个答案:

答案 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需要一个起点。)