Git中是否有命令可以查看(转储到stdout,或在$PAGER或$EDITOR中)特定文件的特定版本?
当前回答
除了吉姆·亨齐克的回答,
可以将修订中的文件导出为,
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
希望这有帮助:)
其他回答
您可以使用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的手册页。
如果您喜欢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
帮助程序从给定修订中获取多个文件
在尝试解决合并冲突时,此助手非常有用:
#!/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
这样,您就保留了文件扩展名,这样您的编辑就不会抱怨,并且可以轻松地找到新文件旁边的旧文件。
方式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进行必要的更改并向所需的分支执行新的提交
推荐文章
- Git从另一个目录克隆
- 如何获得我的代码的最新版本?
- 如何在git中找到原始/master的位置,以及如何更改它?
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头