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


当前回答

帮助程序从给定修订中获取多个文件

在尝试解决合并冲突时,此助手非常有用:

#!/usr/bin/env python3

import argparse
import os
import subprocess

parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
    file_relative = os.path.relpath(os.path.abspath(path), toplevel)
    base, ext = os.path.splitext(path)
    new_path = base + '.old' + ext
    with open(new_path, 'w') as f:
        subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)

GitHub上游。

用法:

git-show-save other-branch file1.c path/to/file2.cpp

结果:以下包含文件的备用版本:

file1.old.c
path/to/file2.old.cpp

这样,您就保留了文件扩展名,这样您的编辑就不会抱怨,并且可以轻松地找到新文件旁边的旧文件。

其他回答

要快速查看与文件旧版本的差异,请执行以下操作:

git show-1 filename.txt>以与文件的最新版本进行比较git show-2 filename.txt>与第二个最新版本进行比较git show-3 fielname.txt>与上一个第三个最新版本进行比较

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

除了吉姆·亨齐克的回答,

可以将修订中的文件导出为,

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

希望这有帮助:)

如果提交发生在最近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

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

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