如何在引入更改的提交中找到最近的行?

时间:2015-08-10 19:25:08

标签: git git-log

如何在git中找到最近添加特定方法调用或导入的代码行? 如果我执行git log -Sfoogit log -S"import some.class",我会得到一个提交列表,如果我添加-p,我会看到完整的提交但是我怎样才能看到引入更改的提交行和不是整个提交?

4 个答案:

答案 0 :(得分:1)

git show | grep "import some.class"

Git show显示提交中的更改(默认情况下针对HEAD,另外还可以提供sha1),您可以将此命令与grep结合使用来过滤您要查找的任何更改。

另一方面,git log -pgit show几乎完全相同,只是它将它应用于当前分支中的所有提交。所以grep也可以应用于此命令,并另外指定匹配字符串周围要包含的行数:

git log -p | grep "import" -5

答案 1 :(得分:1)

我相信您可以使用git-loggrep的某些功能来实现您的目标。


git log -p将显示所有提交及其相应的块(在查找特定代码时很有用)

git log --since "1 month ago"如果您知道最近引入了代码,那么--since选项很有用

git log origin/release/3.0.0 --not origin/release/2.10.4 --not选项将显示一个分支中不在另一个分支中的所有提交。这仅适用于传统上不进行rebase的情况,因为rebasing会更改提交的sha1。

git log --author Steve您可以过滤提交作者的搜索。如果你知道史蒂夫是那个做出改变的人,那就很有用。

grep -i不区分大小写的搜索

grep -C将围绕grep匹配添加提供的上下文行数。如果您试图找出发生更改的提交的sha1

,则非常有用



将它们绑在一起你应该能够使用一些选项来识别你正在寻找的代码变化,如下所示:

git log -p --since "1 month ago" | grep 'import some.class'

git log -p --since "1 month ago" | grep -i -C 50 'import some.class'

git log -p --since "1 month ago" --author Steve | grep -i -C 50 'import some.class'

git log -p origin/release/3.0.0 --not origin/release/2.10.4 | grep 'import some.class'

答案 2 :(得分:0)

git log中有一个选项可以显示特定功能的更改,因此您可以使用它来帮助确定功能添加到特定文件的位置git log -L:main:file --reverse,其中main是您的名称功能和文件是您的文件名。 --reverse选项将从最旧到最新列出,因此如果添加了一个函数,结果日志中的第一个条目将是添加它的位置,然后它会在您向下时显示对它的更改。我尝试使用C ++样式函数声明,它似乎找到它,即void foo::main(),所以看起来它也适用于Java? (但尚未验证该语法)。还有另一个选项git log -Sfunction_name,您可以将function_name替换为任何字符串,它将在每次提交的更改中搜索对该字符串的引用。

答案 3 :(得分:0)

git blame -L <start>,<end> -- <file>其中<start><end>是行号,会显示上次触及该行的提交内容。通过cmdline git blame进行深入挖掘通常很方便,但我发现使用git gui blame通常更容易,例如git gui blame -- foo.txt。它将为您提供一个简单的GUI,您可以在其中查看哪些提交更改了一行甚至右键单击 - &gt; &#34;责备父母提交&#34;进一步追溯到历史。