2017-08-09 89 views
1

我想弄清楚在哪一点文件中的一行被引入,并在哪些提交它被改变。git log单行-L没有显示差异或补丁?

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

git log -L 10,11:example.txt 

然而,对于每个日志条目它包括“差异”或“补丁”(I”不敢确定的差别还的),好像我跑:

git log -p 

这使得输出更难以阅读 - 我只是想查看提交信息及其ID的列表提交该改变我感兴趣的线路

例如,通常使用--pretty格式可以简化git日志,使我们能够通过一系列完整的提交消息来查找我们感兴趣的信息。例如,我使用--oneline频繁选项:

git log --oneline 

然而,它显示了完整的日志 - 我们想过滤这个只显示提交,改变感兴趣的线。像下面将是巨大的,但漂亮的ONELINE格式似乎并没有结合工作与-L标志:

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

我试过的选项和参数的各种组合从git log documentation但没有发现任何有效的东西。

有没有其他人面对这个问题或有什么可以工作的想法?

感谢您阅读这一步

+0

给出一个基于命令行的答案远远超出了我的薪酬等级,但我可以告诉你,大多数具有Git集成的IDE(例如IntelliJ,Eclipse)都可以注释源文件中的每一行,谁最后触摸了一条特定线。实际上,我宁愿用图形方式而不是从命令行获取这些信息。 –

+0

已经找到[此帖子](https:// stackoverflow。com/questions/41427590/git-log-l-without-diff) 这个问题的答案建议使用git log -L命令,并且使用egrep提取提交。不知道现在怎么... – lemongrassnginger

回答

0

几个详细的解决方案是使用普通的Git日志-L命令输出的日志感兴趣的线路,然后通过管道将输出到grep或sed将只打印件你感兴趣的提交信息。 试试你喜欢哪个版本。如果有人有一个不太详细的解决方案,我会很乐意听到!

的grep:

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

grep命令每个日志条目的所述第一线和所述打印下一个4行-A标志

sed的相符:

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

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