git - 仅给出文件的一个版本查找 Git 提交

标签 git

如果您只有一个文件(仅包含文本数据),您如何确定它映射到历史记录中的哪个提交?

当有人从存储库中提取文件的一个子集并将它们转储到某个地方时,这对于查找项目的版本很有用。

最佳答案

1) 遍历存储库 (.git/objects/*) 中的所有对象,将每个文件(使用 git cat-file)与您给定的文件进行比较

2) 找到与输入文件匹配的对象的 SHA 后,找到包含该文件 SHA 的提交。遍历所有提交并使用 git ls-tree | grep 查找哪个提交包含该对象。

我将此解决方案 merge 为一个简单、易于运行的脚本: https://gist.github.com/themattman/20ec6da84304740972e057c22b15c0ee

关于git - 仅给出文件的一个版本查找 Git 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38926282/

相关文章:

git - 为什么在压榨后错误切换分支?没什么可 promise 的

GitHub 提交未记录在 'Your Contributions` 日历中

git - `.git/objects/info`目录是什么

git - 将分支和子分支 merge 回 master

git - 我可以让 git 在 checkout 分支时自动更新子模块吗?

git clone 无法解析代理

git - 让 git 显示正在运行内容过滤器的特定文件名

git - git如何跟踪文件的变化

Gitlab 运行程序根据提交消息有条件运行

git - 将 git 目录更改为上一个