Git中是否有命令可以查看(转储到stdout,或在$PAGER或$EDITOR中)特定文件的特定版本?
当前回答
您可以使用这样的脚本将文件的所有版本转储到单独的文件中:
e.g.
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
在此处获取脚本,作为另一个类似问题的答案
其他回答
除了吉姆·亨齐克的回答,
可以将修订中的文件导出为,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
希望这有帮助:)
方式1:(我更喜欢这种方式,不能丢失未提交的数据)
使用:git reflog查找提交id列出提交git diff树中的文件--无提交id--仅名称-r<commitHash>例子:git diff树--无提交id--仅名称-r d2f9ba4d2f9ba4是来自步骤1的提交id。使用以下命令打开所需文件:git show<commitHash>:/path/to/file例子:git show d2f9ba4:Src/Ext/MoreSwiftUI/ListCustom.swift服务器/。。。是步骤2的文件路径。
方式2:(能够丢失未提交的数据)
使用:git reflog查找提交id对此提交进行硬重置:git reset--hard%commit ID%例子:git重置--硬c14809fa进行必要的更改并向所需的分支执行新的提交
您还可以使用gitshow命令指定提交散列(通常也称为提交ID)。
简而言之
git show<commitHash>:/path/to/file
一步一步地
使用gitlog/path/to/file显示给定文件的所有更改的日志在所示的更改列表中,它显示了提交哈希,例如提交06c98…(06c98是提交哈希)复制提交哈希使用步骤3的提交哈希和步骤1的路径/to/file运行命令gitshow<commitHash>:/path/to/file。
注:添加./当指定相对路径似乎很重要时,即git show b2f8be57716657759b55e11cfff1404baf63a84:/飞行模拟/src/main/components/nav-oriz.html。
帮助程序从给定修订中获取多个文件
在尝试解决合并冲突时,此助手非常有用:
#!/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
这样,您就保留了文件扩展名,这样您的编辑就不会抱怨,并且可以轻松地找到新文件旁边的旧文件。
您可以使用这样的脚本将文件的所有版本转储到单独的文件中:
e.g.
git_dump_all_versions_of_a_file.sh path/to/somefile.txt
在此处获取脚本,作为另一个类似问题的答案
推荐文章
- 如何从远程Git存储库中提取并覆盖本地存储库中的更改?
- Github:导入上游分支到fork
- Git单次修订的日志
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?