Git中是否有命令可以查看(转储到stdout,或在$PAGER或$EDITOR中)特定文件的特定版本?


当前回答

如果您喜欢GUI,可以使用gitk:

gitk开头为:gitk/path/to/file选择屏幕顶部的修订,例如按描述或日期。默认情况下,屏幕下部显示该版本的差异(对应于“补丁”单选按钮)。要查看选定版本的文件,请执行以下操作:单击“树”单选按钮。这将显示该版本的文件树的根。深入到您的文件。

其他回答

您可以使用git show和存储库根目录的路径(./或../表示相对路径):

$ git show REVISION:path/to/file

用实际版本替换REVISION(可以是Git提交SHA、标记名称、分支名称、相对提交名称或任何其他标识Git中提交的方式)

例如,要查看4次提交之前的文件<repositoryroot>/src/main.c版本,请使用:

$ git show HEAD~4:src/main.c

Git for Windows甚至要求在相对于当前目录的路径中使用正斜杠。有关更多信息,请查看gitshow的手册页。

您可以使用这样的脚本将文件的所有版本转储到单独的文件中:

e.g.

git_dump_all_versions_of_a_file.sh path/to/somefile.txt

在此处获取脚本,作为另一个类似问题的答案

如果您喜欢GUI,可以使用gitk:

gitk开头为:gitk/path/to/file选择屏幕顶部的修订,例如按描述或日期。默认情况下,屏幕下部显示该版本的差异(对应于“补丁”单选按钮)。要查看选定版本的文件,请执行以下操作:单击“树”单选按钮。这将显示该版本的文件树的根。深入到您的文件。

如果提交发生在最近90天内,则按日期执行如下操作:

git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt

注意,HEAD@{2013-02-25}在这个存储库中表示“HEAD在2013-02-25的位置”(使用reflog),而不是“历史上这个分支中2013-02-25之前的最后一次提交”。

这很重要!这意味着,默认情况下,此方法仅适用于过去90天内的历史记录。否则,您需要执行以下操作:

git show $(git rev-list -1 --before="2013-02-26" HEAD):./fileInCurrentDirectory.txt

gitlog-p不仅会显示提交日志,还会显示每次提交的差异(合并提交除外)。然后可以按/,输入文件名,然后按enter。按n或p转到下一次/上一次出现。这样,您不仅可以看到文件中的更改,还可以看到提交信息。