单行-L的git日志没有显示差异或补丁?

时间:2017-08-09 09:47:01

标签: git

我试图弄清楚文件中的哪一行被引入,哪些提交被更改。

我可以查看这些行的历史记录(文件example.txt中的第10行):

git log -L 10,11:example.txt

但是,对于每个日志条目,它包含一个'差异'或者补丁' (我还不确定其中的差异)好像我要跑:

git log -p

这使得输出更难以阅读 - 我只想查看提交消息的列表及其提交的ID,这些提交更改了我感兴趣的行。 < / p>

例如,通常使用--pretty格式可以简化git日志,使我们能够通读一个干净的提交消息列表来查找我们感兴趣的信息。例如,我使用 - -oneline选项经常:

git log --oneline

然而,这显示了完整的日志 - 我们希望将其过滤为仅显示更改了感兴趣的行的提交。像下面这样的东西会很棒,但漂亮的oneline格式似乎不能与-L标志结合使用:

git log --oneline -L 10,11:example.txt

我尝试了git log documentation的各种选项和参数组合,但没有发现任何可行的方法。

是否有其他人会遇到这个问题,或者对可行的方法有任何想法?

感谢你阅读这篇文章

2 个答案:

答案 0 :(得分:1)

VonC here所述,

git log -s -L <start>,<end>:file
# and 
git log -s -L :<funcname>:file

都应该使用Git> = 2.22.0抑制补丁输出。这是在提交9f607cd09c (line-log: suppress diff output with "-s", 2019-03-07)中添加的。

此外,您提到

git log --oneline -L 10,11:example.txt

不起作用。 --oneline应该仅适用于提交标头,而不适用于diff输出(--oneline -p将在一行上显示提交信息,然后在diff输出上显示)。

我检查了Git 2.13.3(于2017年7月12日发布,因此在您发布问题时),git log --oneline -L 10,11:example.txt确实有效(但是它输出了完整补丁)。

答案 1 :(得分:0)

一些详细的解决方案是使用普通的git log -L命令输出感兴趣的行的日志,然后将输出传递给grep或sed以仅打印您感兴趣的提交消息的部分。 尝试您喜欢哪个版本。如果有人有一个不那么详细的解决方案,我很乐意听到!

<强>的grep:

git log -L 10,11:example.txt | grep 'commit \w' -A 4

grep命令匹配每个日志条目的第一行,并使用-A标志打印接下来的4行

<强> sed的:

git log -L 10,11:example.txt | sed -n '/commit/{p;n;n;n;n;p}' 

当找到匹配项时,通过p命令打印该行,通过n命令跳过下一行,然后使用p打印下一行。前导-n选项可防止所有其他打印。感谢this answer