我正在尝试找到在某个时间点删除的功能。我尝试使用git log -L :<funcname>:<file>
找到已删除的函数。结果最终为fatal: -L parameter '<funcname>' starting at line 1: no match
。
例如,如果我正在搜索函数findMe
。
我输入git log -L :findMe:index.php
index.php
<?php
class stuff {.....}
class otherStuff{....}
class moreStuff{
public function test(){...}
public function findMe() {....}
public function test1() {....}
}
?>
结果fatal: -L parameter '<funcname>' starting at line 1: no match
。
参考git log
:
-L:&lt; funcname&gt;:&lt; file&gt;
如果
“:<funcname>”
代替<start>
和<end>
,则它是一个正则表达式,表示从匹配<funcname>
的第一个funcname行的范围,直到下一个funcname行。“:<funcname>”
从上一个-L
范围的末尾搜索(如果有的话),否则从文件的开头搜索。“^:<funcname>”
从文件开头搜索。
答案 0 :(得分:0)
-L
只能查找正在显示的文件版本中存在的内容。
(您引用的错误消息表明您将文字字符串<funcname>
传递给您的命令,而不是字符串findMe
。但是,如果当前不再存在findMe
或指定版本的index.php
,-L
无论如何都无法找到它。)
要查找更改字符串或正则表达式的出现次数的提交,或影响与字符串或正则表达式匹配的行,请使用{{1} }或git log -S
。请注意,git log -G
默认采用字符串,而-S
采用正则表达式(总是)。要使-G
搜索正则表达式而不是简单字符串,请添加-S
。您可以将此类搜索限制为特定路径(根据需要设置多个路径名,与--pickaxe-regex
匹配,必须搜索一个文件)。
因此,如果-L
曾经存在findMe
但index.php
中不再存在,则命令:
index.php
将找到所有更改此提交的提交,因为它将从git log -S findMe --full-history -- index.php
中的一个或多个实例发送到index.php
中的零个匹配项。但请注意,添加路径名index.php
会启用历史记录简化。使用index.php
禁用此简化,以便您可以找到删除它的所有提交,而不仅仅是某些提交(如果删除通过,有时会失败)合并)。
答案 1 :(得分:0)
git log -L
仅在文件的最高级别上搜索功能名称。您可以使用该命令查看任何类或类外任何函数的历史记录,但不幸的是,它无法在类内找到函数。
最好的办法是git log -L :moreStuff:index.php
,然后在输出中搜索功能日志。
答案 2 :(得分:0)
使用Git 2.30(Q1 2021)应该更容易。
以前,“ git blame -L :funcname -- path
” (man)在定义了userdiff驱动程序的路径上不能很好地工作。
请参见commit 3af31e8,commit 88894aa,commit 9466e38,commit 180d641,commit 0cce88f,commit a4514a4,commit fd5c74e,{{3} }(2020年11月1日)通过commit f9c8d8c。
(由Philippe Blain (phil-blain
)在Junio C Hamano -- gitster
--中合并,2020年11月18日)
commit 3f6dc9c:使用
funcname
驱动程序责怪userdiff
签名人:Philippe Blain
在
blame
:: cmd_blame中,我们将'sb
''结构blame_scoreboard
'的'path'字段作为'path
'自变量发送给'{ {3}}”,但尚未设置“sb.path
”;几行之后,将其设置为局部变量'path
'。在第1137行。如果我们指责一个函数名,即
blame.c
(line-range.c::parse_range_arg
),则仅在“path
”中使用此“parse_range_arg
”自变量,并且在这种情况下,它被发送到'parse_range_funcname
',在这里它用于确定是否应为上述userdiff
使用<path>
驱动程序来匹配给定的函数名。 >由于尚未设置'
path
,因此从未使用过userdiff驱动程序,因此我们使用默认的funcname regex,它通常不适用于设置为使用特定userdiff驱动程序的路径,并且因此我们要么匹配一些无关的线,要么死于fatal: -L parameter '<funcname>' starting at line 1: no match
自
git blame -L :<funcname> <path>
(man)学会指责git blame
中的funcname
(“ {{1} }:log -L
的语法以:pattern:file
查找,2013-03-28,Git v1.8.4-rc0-man)。在某些其他字段初始化时,通过在“
funcname
”中更早地初始化“sb.path
”来启用使用特定userdiff驱动程序的路径的函数名,以便在传递给“ { {1}}”。