【发布时间】:2010-08-07 20:05:52
【问题描述】:
我的系统上安装了一个文件,该文件已知是 git 存储库的一部分。我想找出哪个提交(重新)引入了该文件的该版本,即哪个提交负责将文件置于其当前状态。
我知道该文件在 repo 中,因为 git show $(git hash-object $the_file) 有效。
在这一点上,我真的不需要解决这个示例问题,我只是希望能更多地了解如何导航 git 的数据结构。
【问题讨论】:
我的系统上安装了一个文件,该文件已知是 git 存储库的一部分。我想找出哪个提交(重新)引入了该文件的该版本,即哪个提交负责将文件置于其当前状态。
我知道该文件在 repo 中,因为 git show $(git hash-object $the_file) 有效。
在这一点上,我真的不需要解决这个示例问题,我只是希望能更多地了解如何导航 git 的数据结构。
【问题讨论】:
如果当前版本引入了您可以测试的特定行为(通过单元测试程序、shell 脚本等),您可以使用 git bisect 工具找到负责该行为的提交。
这里是这个命令的手册:http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html
【讨论】:
感谢@Jefromi 指出重复。由于此问题尚未作为重复问题关闭,因此我将参考另一个线程上的 accepted answer 来回答它,其中包含似乎可以执行我想要的 perl 脚本,或多或少最佳效率。
【讨论】:
git log <the file>怎么样?
【讨论】:
使用git hash-object <file>获取给定版本文件的哈希,然后使用git log --raw -- <file>,并通过寻呼机(在'less'和'more'中是'/')搜索这个哈希。
【讨论】: