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