在Git中是否有一个命令可以查看(转储到stdout,或者在 $PAGER 或 $EDITOR 中)特定文件的特定版本?
$PAGER
$EDITOR
你可以使用 git show :
git show
$ git show REVISION:path/to/file
将REVISION替换为您的实际修订版(可以是Git提交SHA,标记名称,分支名称,相对提交名称或在Git中标识提交的任何其他方式)
例如,要查看4个提交前的文件 src/main.c 的版本,请使用:
src/main.c
$ git show HEAD~4:src/main.c
请注意,路径来自存储库的根目录,除非它以./或../开头以指示相对路径 . 即使在相对于当前目录的路径中,Git for Windows也需要正斜杠 . 有关更多信息,请查看git-show的手册页 .
按日期执行此操作如下所示:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
请注意 HEAD@{2013-02-25} 表示此存储库中的"where HEAD was on 2013-02-25"(使用the reflog),而不是"the last commit before 2013-02-25 in this branch in history" .
HEAD@{2013-02-25}
如果您喜欢GUI,可以使用gitk:
gitk /path/to/file
选择屏幕顶部的修订版,例如按描述或日期 . 默认情况下,屏幕的下半部分显示该修订的差异(对应于“补丁”单选按钮) .
要查看所选修订的文件:
单击"tree"单选按钮 . 这将显示该修订版本的文件树的根目录 .
深入查看您的文件 .
您还可以使用git show command指定 commit hash (通常也称为 commit ID ) .
commit hash
commit ID
git show <commitHash>:/path/to/file
使用git log /path/to/file显示给定文件的所有更改的日志
在显示的更改列表中,它显示 commit hash ,例如 commit 06c98... (06c98 ...是提交哈希)
commit 06c98...
复制 commit hash
使用步骤3的 commit hash 和步骤1的 path/to/file 运行命令 git show <commitHash>:/path/to/file .
path/to/file
Note: 在指定相对路径时添加 ./ 似乎很重要,即 git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html .
./
git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
除了Jim Hunziker的回答,
您可以从修订版中导出文件,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
希望这可以帮助 :)
git log -p 不仅会显示提交日志,还会显示每次提交的差异(合并提交除外) . 然后你可以按 / ,输入文件名并按 enter . 按 n 或 p 转到下一个/上一个匹配项 . 这样,您不仅可以看到文件中的更改,还可以查看提交信息 .
git log -p
/
enter
n
p
您可以使用这样的脚本将文件的所有版本转储为单独的文件:
例如
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
得到script here作为另一个类似问题的答案
Helper to fetch multiple files from a given revision
在尝试解决合并冲突时,此帮助程序非常有用:
#!/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 upstream .
用法:
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>来检查文件的最后第3个版本
9 回答
你可以使用
git show
:将REVISION替换为您的实际修订版(可以是Git提交SHA,标记名称,分支名称,相对提交名称或在Git中标识提交的任何其他方式)
例如,要查看4个提交前的文件
src/main.c
的版本,请使用:请注意,路径来自存储库的根目录,除非它以./或../开头以指示相对路径 . 即使在相对于当前目录的路径中,Git for Windows也需要正斜杠 . 有关更多信息,请查看git-show的手册页 .
按日期执行此操作如下所示:
请注意
HEAD@{2013-02-25}
表示此存储库中的"where HEAD was on 2013-02-25"(使用the reflog),而不是"the last commit before 2013-02-25 in this branch in history" .如果您喜欢GUI,可以使用gitk:
选择屏幕顶部的修订版,例如按描述或日期 . 默认情况下,屏幕的下半部分显示该修订的差异(对应于“补丁”单选按钮) .
要查看所选修订的文件:
单击"tree"单选按钮 . 这将显示该修订版本的文件树的根目录 .
深入查看您的文件 .
您还可以使用git show command指定
commit hash
(通常也称为commit ID
) .简而言之
git show <commitHash>:/path/to/file
一步一步
使用git log /path/to/file显示给定文件的所有更改的日志
在显示的更改列表中,它显示
commit hash
,例如commit 06c98...
(06c98 ...是提交哈希)复制
commit hash
使用步骤3的
commit hash
和步骤1的path/to/file
运行命令git show <commitHash>:/path/to/file
.Note: 在指定相对路径时添加
./
似乎很重要,即git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
.除了Jim Hunziker的回答,
您可以从修订版中导出文件,
希望这可以帮助 :)
git log -p
不仅会显示提交日志,还会显示每次提交的差异(合并提交除外) . 然后你可以按/
,输入文件名并按enter
. 按n
或p
转到下一个/上一个匹配项 . 这样,您不仅可以看到文件中的更改,还可以查看提交信息 .您可以使用这样的脚本将文件的所有版本转储为单独的文件:
例如
得到script here作为另一个类似问题的答案
Helper to fetch multiple files from a given revision
在尝试解决合并冲突时,此帮助程序非常有用:
GitHub upstream .
用法:
结果:以下内容包含文件的备用版本:
这样,您保留文件扩展名,以便编辑器不会抱怨,并且可以轻松找到新文件旁边的旧文件 .