Git 列出包含字符串的提交,并在包含该字符串的更改行周围进行比较

kaj*_*acx 5 git git-log

假设我有一个名为 的函数MySuperFunction。如何列出添加/删除/更改/使用此函数的所有提交,仅包含该更改的上下文?

例如,如果 commitc使用此函数添加了一行和其他 100 行,我想查看:提交哈希、提交消息、提交的作者和日期(可选),最重要的是:函数所在行周围的差异添加了上下文前后各 5 行(包含文件名和行号),但不是提交的全部 100 行。

我尝试了什么以及为什么它不起作用:

  • git log -p | grep -C5 "MySuperFunction"- 打印带有上下文的差异,但不打印提交信息。
  • git grep "MySuperFunction"- 只打印当前的使用情况MySuperFunction
  • git log -GMySuperFunction- 只打印commit信息,但不打印diff
  • git log -GMySuperFunction -p- 打印提交信息和差异,但它打印每个提交的整个差异,而不仅仅是周围的行MySuperFunction
  • git rev-list --all | GIT_PAGER=cat xargs git grep 'MySuperFunction'- 打印内容中包含“MySuperFunction”的所有提交,而不是其差异

是否有任何 git log 选项,或者我是否必须编写自己的脚本来仅获取差异的输出git log -GMySuperFunction -p并过滤差异,留下提交信息?