Git如何查看某个函数的更改历史/删除?

Dan*_*n C 5 php git gitlab

我试图找到一个在某个时间点被删除的函数。我尝试使用git log -L :<funcname>:<file>来定位被删除的函数。结果最终是fatal: -L parameter \'<funcname>\' starting at line 1: no match.

\n\n

例如,如果我正在搜索 function findMe

\n\n

我输入git log -L :findMe:index.php

\n\n

index.php

\n\n
 <?php\n class stuff {.....}\n class otherStuff{....}\n class moreStuff{\n   public function test(){...}\n   public function findMe() {....}\n   public function test1() {....}\n }\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果fatal: -L parameter \'<funcname>\' starting at line 1: no match

\n\n

参考git log

\n\n
\n

-L :<函数名称>:<文件>

\n\n

如果\xe2\x80\x9c:<funcname>\xe2\x80\x9d给出 代替 和<start>,则它是一个正则表达式,表示从匹配 的第一个 funcname 行到下一个 funcname 行的<end>范围。从上一个范围的末尾搜索(如果有),否则从文件开头搜索。从文件开头搜索。<funcname>\xe2\x80\x9c:<funcname>\xe2\x80\x9d-L\xe2\x80\x9c^:<funcname>\xe2\x80\x9d

\n
\n

tor*_*rek 1

-L只能找到所显示文件版本中存在的内容。

(您引用的错误消息表明您将文字字符串传递<funcname>给命令,而不是字符串findMe。但是,如果findMe当前或指定版本中不再存在index.php,则-L无论如何都无法找到它。)

要查找更改字符串或正则表达式出现次数或影响与字符串或正则表达式匹配的行的提交git log -S,请使用或git log -G。请注意,-S默认情况下采用字符串,而-G(始终)采用正则表达式。要-S搜索正则表达式而不是简单的字符串,请添加--pickaxe-regex. 您可以将此类搜索限制为特定路径(任意多个路径名, vs -L,它必须只搜索一个文件)。

因此,如果findMe曾经存在于index.php但不再存在于index.php,则命令:

git log -S findMe --full-history -- index.php
Run Code Online (Sandbox Code Playgroud)

将找到所有更改此值的提交,因为它将从 中出现一次或多次变为 中index.php出现零次index.php。但请注意,添加路径名index.php会启用历史记录简化。使用--full-history会禁用这种简化,以便您可以找到删除它的所有提交,而不仅仅是某些提交(如果删除是通过合并进行的,则有时会失败)。