我试图弄清楚文件中的哪一行被引入,哪些提交被更改。
我可以查看这些行的历史记录(文件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的各种选项和参数组合,但没有发现任何可行的方法。
是否有其他人会遇到这个问题,或者对可行的方法有任何想法?
感谢你阅读这篇文章
答案 0 :(得分:1)
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