【问题标题】:Searching for commits which reference a given object搜索引用给定对象的提交
【发布时间】:2010-08-07 20:05:52
【问题描述】:

我的系统上安装了一个文件,该文件已知是 git 存储库的一部分。我想找出哪个提交(重新)引入了该文件的该版本,即哪个提交负责将文件置于其当前状态。

我知道该文件在 repo 中,因为 git show $(git hash-object $the_file) 有效。

在这一点上,我真的不需要解决这个示例问题,我只是希望能更多地了解如何导航 git 的数据结构。

【问题讨论】:

标签: git hash git-log


【解决方案1】:

如果当前版本引入了您可以测试的特定行为(通过单元测试程序、shell 脚本等),您可以使用 git bisect 工具找到负责该行为的提交。

这里是这个命令的手册:http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html

【讨论】:

  • 有趣的想法,但在这种情况下,repo 没有可以测试程序“行为”的工具集,我不确定该文件的任何修订应该是什么做。无论如何,我更感兴趣的是弄清楚如何遍历 git 数据结构,而不是解决这个特定问题。
【解决方案2】:

感谢@Jefromi 指出重复。由于此问题尚未作为重复问题关闭,因此我将参考另一个线程上的 accepted answer 来回答它,其中包含似乎可以执行我想要的 perl 脚本,或多或少最佳效率。

【讨论】:

    【解决方案3】:

    git log <the file>怎么样?

    【讨论】:

    • 这会告诉我哪个提交引入了文件的当前版本。它还要求我知道源文件在 repo 中的位置,并且我认为它还没有经历过重写,这会阻止 git 将其修订版本之一识别为副本。
    【解决方案4】:

    使用git hash-object <file>获取给定版本文件的哈希,然后使用git log --raw -- <file>,并通过寻呼机(在'less'和'more'中是'/')搜索这个哈希。

    【讨论】:

      猜你喜欢
      • 2017-03-08
      • 2017-07-07
      • 1970-01-01
      • 2019-07-21
      • 2023-03-27
      • 1970-01-01
      • 2014-03-03
      • 2011-08-16
      • 2010-11-26
      相关资源
      最近更新 更多