【问题标题】:How do I search git history for a disappeared line?如何在 git 历史记录中搜索消失的行?
【发布时间】:2010-04-23 16:10:55
【问题描述】:

我需要在 git 存储库中搜索特定文件的历史记录以找到已消失的行。提交消息将没有任何相关文本可供搜索。我使用什么命令?

更多详情:这是我在非恒星任务跟踪软件中的待办事项列表的历史记录。我已经保留了两年,因为软件中没有为我保留足够的信息。不幸的是,我的提交消息通常只有任务 ID,而我需要做的是按主题而不是按编号查找已关闭的任务。是的,真正的解决方案是更好的任务跟踪软件,但这完全不在我的掌控之中。

【问题讨论】:

    标签: git


    【解决方案1】:

    这是镐的工作!

    来自 git-log 手册页:

    -S<string>

    查找引入或删除<string> 实例的差异。请注意,这与仅出现在 diff 输出中的字符串不同;有关详细信息,请参阅 gitdiffcore(7) 中的镐条目。

    您当然可以使用更多选项来缩小范围,例如:

    git log -Sfoobar --since=2008.1.1 --until=2009.1.1 -- path_containing_change
    

    还有:

    -G<regex>

    查找补丁文本包含匹配的添加/删除行的差异。 为了说明 -S --pickaxe-regex 和 -G 之间的区别,请考虑在同一文件中具有以下差异的提交:

    + return frotz(nitfol, two->ptr, 1, 0);

    ...

    - hit = frotz(nitfol, mf2.ptr, 1, 0);

    虽然git log -G"frotz\(nitfol" 将显示此提交,但git log -S"frotz\(nitfol" --pickaxe-regex 不会(因为该字符串的出现次数没有改变)。

    【讨论】:

    • 我觉得仅此功能就应该将人们转换为 git。 +1
    • 这看起来很棒,但是 path_ contains_change 部分是如何工作的呢?当我添加它时,我没有得到任何结果,但没有它我会看到相关的提交。
    • @Ibrahim 可能是一个错误......我看到你的行为相同。我通常会测试一些东西,但这是两年前的事了,所以我不记得我是否测试过,因为按照 git-log (和手册页)的正常语法,我希望它工作。通常,添加这样的路径参数会将其限制为影响该路径的提交。
    • 这太棒了!这对我有用:git log -GcountryCodesArray --since=2013.2.13 --until=2013.3.14 -- application/modules/default/
    • @Ryan 我也喜欢这个选项,git log -G 的文档:git-scm.com/docs/git-log#Documentation/git-log.txt--Gltregexgt。特别注意,如果您正在寻找特殊字符,可以使用引号:git log -G"Microsoft.Network/dnsZones/A"
    【解决方案2】:

    git log --stat | grep 'filename' 开始缩小范围怎么样?

    【讨论】:

    • 我没有看到任何迹象表明 OP 知道文件名。不过,总的来说是好的方法。当然你也可以git log filename.
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2019-12-01
    • 2011-02-25
    • 2018-12-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多