搜索所有以前添加了(拼写错误的)字符串的文件的Git提交

时间:2014-08-09 02:22:14

标签: git

我想知道是谁更改了文件以及何时更改。有一条用无法分析的英语写的评论。我想通过对该文件的所有提交搜索(二进制搜索?)作为该注释的第一个实例。这甚至可以自动化的方式完成吗?

1 个答案:

答案 0 :(得分:4)

git blame filename | grep [string]

会这样做

在回购中git blame filename

示例:

$ git blame app/models/link.rb
^772df05 (Michael Durrant   2011-04-23 23:12:24 -0400  1) class Link < ActiveRecord::Base
5252167d (Michael Durrant   2012-09-03 21:39:48 -0400  2) 
^772df05 (Michael Durrant   2011-04-23 23:12:24 -0400  3)   belongs_to :group
^772df05 (Michael Durrant   2011-04-23 23:12:24 -0400  4)   validates_presence_of :url_address
^772df05 (Michael Durrant   2011-04-23 23:12:24 -0400  5)   validates_presence_of :group_id
...

所以要搜索字符串,只需grep

$ git blame app/models/link.rb | grep the_dt
00000000 (Not Committed Yet 2014-08-08 22:29:15 -0400 20)   def verified_date=(the_dt)
00000000 (Not Committed Yet 2014-08-08 22:29:15 -0400 21)     verified_date=the_dt

如果您只想要最后一行(第一个实例),请使用tail

$ git blame app/models/link.rb | grep url | tail -1
00000000 (Not Committed Yet 2014-08-08 22:33:19 -0400 26)   def verify_url

还有git log -S,例如 请注意,即使您正在搜索大写,也必须使用小写(在此示例中为管道/管道中)。

$ git log -Spipeline
commit c0fdeb8a603dd6f61e487ff4b5f7de4df4d43677
Author: Michael Durrant <m2@snap2web.com>
Date:   Sun Feb 23 19:33:09 2014 -0500

    Switch application to Asset Pipeline (many changes).

还有git log -G可让您使用正则表达式。 即使您在搜索中只有字符串空格,例如

,这也很有用
$ git log -Gasset.*pipeline                                                                                
commit c0fdeb8a603dd6f61e487ff4b5f7de4df4d43677
Author: Michael Durrant <m2@snap2web.com>
Date:   Sun Feb 23 19:33:09 2014 -0500

    Switch application to Asset Pipeline (many changes).