Git中是否有命令可以查看(转储到stdout或in $PAGER
或中$EDITOR
)特定文件的特定版本?
git checkout <sha1-of-the-commit-you-need>
稍后执行git checkout HEAD
Git中是否有命令可以查看(转储到stdout或in $PAGER
或中$EDITOR
)特定文件的特定版本?
git checkout <sha1-of-the-commit-you-need>
稍后执行git checkout HEAD
Answers:
您可以使用git show
来自存储库根目录的路径(./
或../
用于相对路径):
$ git show REVISION:path/to/file
替换REVISION
为您的实际修订版(可以是Git提交SHA,标签名称,分支名称,相对提交名称,或在Git中标识提交的任何其他方式)
例如,要查看<repository-root>/src/main.c
4次提交之前的文件版本,请使用:
$ git show HEAD~4:src/main.c
Git for Windows 即使在相对于当前目录的路径中也需要正斜杠。有关更多信息,请参见的手册页git-show
。
按日期执行如下操作:
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
请注意,这HEAD@{2013-02-25}
表示此存储库中的“ HEAD位于2013-02-25上”(使用reflog),而不是“历史记录中此分支中2013-02-25之前的最后一次提交”。
master
而不是很有用HEAD@{2013-02-25}
git log --since='2016-04-28 23:59:59 +0100'
吗?
如果您喜欢GUI,则可以使用gitk:
用以下命令启动gitk:
gitk /path/to/file
在屏幕顶部选择修订版本,例如按描述或日期。默认情况下,屏幕下部显示该版本的差异(对应于“补丁”单选按钮)。
要查看所选版本的文件:
gitk REVISION /path/to/file
。例如,当您要检查某个版本时,这会派上用场。
您还可以使用命令指定commit hash
(通常也称为commit ID
)。git show
git show <commitHash>:/path/to/file
git log /path/to/file
commit hash
诸如commit 06c98...
(06c98 ...是提交哈希)commit hash
git show <commitHash>:/path/to/file
使用commit hash
第3步和path/to/file
第1 步运行命令。注意:./
在指定相对路径时添加似乎很重要,即git show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.html
。
git show <SHA1> --name-only
它来获取。
除了Jim Hunziker的回答,
您可以将修订版中的文件导出为
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
希望这可以帮助 :)
方式1 :( 我更喜欢这样)
git reflog
git diff-tree --no-commit-id --name-only -r <commitHash>
示例:
git diff-tree --no-commit-id --name-only -r d2f9ba4
//“ d2f9ba4”是来自“ 1”的提交ID。
git show <commitHash>:/path/to/file
例如:
git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift
//“ Src / ...”是“ 2”的文件路径。
方式2:
git reflog
git reset --hard %commit ID%
git reset --hard c14809fa
帮手从给定的版本中获取多个文件
尝试解决合并冲突时,此帮助程序非常有用:
#!/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)
用法:
git-show-save other-branch file1.c path/to/file2.cpp
结果:以下内容包含文件的备用版本:
file1.old.c
path/to/file2.old.cpp
这样,您可以保留文件扩展名,这样编辑人员就不会抱怨,并且可以轻松地在较新的文件旁边找到旧文件。