如何在git中找到引入特定行的提交?还是有更好的选择?

如何在git中找到引入特定行的提交?还是有更好的选择?,git,Git,想象一下,git项目中的一个类经历了1000次提交,并多次被访问。我是否有机会检查特定代码行何时(在哪个提交时)被引入到类中 如果没有,是否有一种替代方法,可以在每次提交时找到我特别感兴趣的行集 Ty.您可以使用git bisect回溯引入某些代码的时间(请参阅),并可以使用此技术每次检查代码,然后查看行是否仍然存在。这使得搜索O(日志n)而不是O(n),这为您节省了很多时间 如果您想知道最后一次编辑一行代码的时间,可以使用特定的代码行?就像你事先知道线路是什么?当然有可能。事实上,这很简单。只

想象一下,git项目中的一个类经历了1000次提交,并多次被访问。我是否有机会检查特定代码行何时(在哪个提交时)被引入到类中

如果没有,是否有一种替代方法,可以在每次提交时找到我特别感兴趣的行集


Ty.

您可以使用
git bisect
回溯引入某些代码的时间(请参阅),并可以使用此技术每次检查代码,然后查看行是否仍然存在。这使得搜索O(日志n)而不是O(n),这为您节省了很多时间


如果您想知道最后一次编辑一行代码的时间,可以使用特定的代码行?就像你事先知道线路是什么?当然有可能。事实上,这很简单。只需使用git log上的pickaxe搜索选项:

-S<string>
    Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output;
    see the pickaxe entry in gitdiffcore(7) for more details.
如果要将其限制为特定文件,只需使用标准的
--
语法:

git log -S"public class Foo" -- Foo.java
一般来说,使用以下方法:

git log -S<string> [-- <file>]
git日志-S[--]

有一种方法可以在git中搜索特定的字符串历史记录。其实很简单。查看我的答案了解更多细节。很好!尽管如此,您还是需要知道该行在首次引入时的外观(或者至少是其中的一部分)。这肯定是正确的,但我仍然发现它是我众所周知的git工具箱中最有用的命令之一。
git log -S<string> [-- <file>]