Git中是否有命令可以查看(转储到stdout,或在$PAGER或$EDITOR中)特定文件的特定版本?
当前回答
如果提交发生在最近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
其他回答
gitlog-p不仅会显示提交日志,还会显示每次提交的差异(合并提交除外)。然后可以按/,输入文件名,然后按enter。按n或p转到下一次/上一次出现。这样,您不仅可以看到文件中的更改,还可以看到提交信息。
您可以使用这样的脚本将文件的所有版本转储到单独的文件中:
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
希望这有帮助:)
要快速查看与文件旧版本的差异,请执行以下操作:
git show-1 filename.txt>以与文件的最新版本进行比较git show-2 filename.txt>与第二个最新版本进行比较git show-3 fielname.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进行必要的更改并向所需的分支执行新的提交
推荐文章
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?
- 如何列出提交,因为某些提交?
- 如何在不位于存储库的情况下执行Git命令?
- 为什么git在Windows下记不住我的密码