【问题标题】:Git history - find lost line by keywordGit历史 - 按关键字查找丢失的行
【发布时间】:2011-02-19 19:43:18
【问题描述】:

我在 Git 存储库的某个地方有一行包含“Foo”这个词,之前有几百次提交。

如果有什么方法可以找到它上次所在的修订号?

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    这可以通过gitlogpickaxe (-S) 选项解决

     git log -SFoo -- path_containing_change
    

    (您甚至可以添加时间范围:--since=2009.1.1 --until=2010.1.1

    -S<string>
    

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

    diffcore-pickaxe
    

    此转换用于查找表示涉及指定字符串的更改的文件对。
    diffcore-pickaxe 正在使用时,它会检查是否存在“原始”端具有指定字符串而“结果”端没有指定字符串的文件对。
    这样的文件对表示“出现在此变更集中的字符串”。
    它还检查丢失指定字符串的相反情况。


    2014 年更新:

    从那以后,你可以做(​​来自nilbusanswer):

    git log -p --all -S 'search string'
    git log -p --all -G 'match regular expression'
    

    这些日志命令列出添加或删除给定搜索字符串/正则表达式的提交,(通常)较新的优先。
    -p (--patch) 选项会导致相关差异显示在添加或删除模式的位置,以便您可以在上下文中看到它。

    找到添加了您正在查找的文本的相关提交(例如8beeff00d),找到包含该提交的分支:

    git branch -a --contains 8beeff00d
    

    (我在“How to list branches that contain a given commit?”中引用了最后一条命令)

    【讨论】:

    【解决方案2】:

    最坏的情况,使用git bisectgrep

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2012-02-29
      • 2013-03-17
      • 2016-05-10
      • 2012-08-06
      • 2010-12-03
      • 2011-05-09
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多