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

Git 如何在提交中找到最近引入更改的行?,git,git-log,Git,Git Log,如何在git中找到最近添加了特定方法调用或导入的代码行? 如果我执行git log-Sfoo或git log-S“import some.class”我会得到一个提交列表,如果我添加-p我会看到完整的提交,但是我怎么能只看到引入更改的提交行,而不看到整个提交 git show | grep "import some.class" Git show显示提交中的更改(默认情况下是针对HEAD,另外还可以提供一个sha1),您可以将此命令与grep结合使用,以过滤您正在查找的任何更改 另一方面,gi

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

git show | grep "import some.class"
Git show显示提交中的更改(默认情况下是针对HEAD,另外还可以提供一个sha1),您可以将此命令与
grep
结合使用,以过滤您正在查找的任何更改

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

git log -p | grep "import" -5

我相信你可以利用和的一些特性来实现你想要的


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

git log--since“1个月前”
如果您知道代码是最近引入的,那么--since选项很有用

git log origin/release/3.0.0--not origin/release/2.10.4
not选项将显示一个分支中不在另一个分支中的所有提交。这只有在传统上不做重定的情况下才有效,因为重定会更改提交的sha1

git日志——作者Steve
您可以按提交的作者筛选搜索。如果你知道史蒂夫是做出改变的人,这会很有用

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

grep-C
将在grep匹配周围添加提供的上下文行数。如果您试图找出发生更改的提交的sha1,则此功能非常有用



将它们结合在一起,您应该能够使用一些选项来识别您正在寻找的代码更改,例如:

git log-p——从“1个月前”起| grep'导入一些.class'

git log-p——从“1个月前”开始| grep-i-c50“导入一些.class”

git log-p——从“1个月前”开始——作者Steve | grep-i-c50“导入一些.class”


git日志-p origin/release/3.0.0——非origin/release/2.10.4 | grep'导入一些.class'

git日志中有一个选项显示对特定函数的更改,因此,您可以使用它来帮助识别函数添加到特定文件的位置
git log-L:main:file--reverse
,其中main是函数名,file是文件名。--reverse选项将从最早到最新列出,因此如果添加了一个函数,结果日志中的第一个条目将是它被添加的位置,然后它将在您继续下去时显示对它的更改。我尝试了C++风格的函数声明,它似乎找到了它,即代码>无效的Fo::()(/Cord>),所以它看起来也可能对java有用吗?(但尚未验证该语法)。还有另一个选项
git log-Sfunction\u name
,您可以用任何字符串替换函数\u name,它将在每次提交的更改中搜索对该字符串的引用。

git-L,-
其中
是行号,它将向您显示上次接触该行的提交内容。深入挖掘通常很方便,虽然您可以使用cmdline
git-gull
执行此操作,但我发现使用
git-gui-gull
通常更容易,例如
git-gui-gull--foo.txt
。它将为您提供一个简单的GUI,在其中您可以看到提交更改了一行内容,甚至右键单击->“责怪父提交”以在历史中进一步搜索。

这不会返回任何内容
git show
为您提供了提交中所做更改的相关信息,通过
grep
,您可以过滤出您想要查看的内容。BTW grep是一个unix命令,所以如果您在windows计算机上,您可能会得到一个错误…我在linux上,当我将管道连接到grep时,我得到nothing@Avalanche很可能是
HEAD
(如果不给它一个特定的参数,这是
git show
要操作的默认提交)不是OP感兴趣的提交-建议
git show |…
,并额外解释OP如何找到他们想要查看的提交(他们已经使用
git log-S…
)。@twalberg是的,它只显示了一个提交,而OP希望找到所有提交
git log-p
的作用与git show完全相同,但适用于存储库中的所有提交。这个问题的答案是简单地结合使用
git log-p
grep
来跟踪所需的行。您所说的“提交行”是什么意思?如果只查找提交散列,可以将
--oneline
添加到
git日志
并获取它。@NoufalIbrahim:我想要添加代码的提交行。并不是所有的更改都是提交引入的,恐怕我还是不明白。你能举一个人为的例子来说明你得到了什么和你想要什么吗?
-U
标志将允许您限制差异周围的上下文,但除了更改的内容外,不显示任何内容。我感觉您正在尝试为脚本编写做一些事情。也许一些解释会产生更好的解决办法。@NoufalIbrahim:
git log-Sfoo
给了我:SHA1,作者,日期,描述。我只想得到相关的代码行