Git-查找其提交消息包含特定字符串的文件

时间:2019-01-22 00:20:51

标签: git

我已经能够使用以下命令在提交消息中打印出包含特定字符串的所有日志:

git log --grep=<string>

是否可以获得以类似方式影响的所有文件的列表。即上一个命令显示的提交所影响的所有文件。

根据Amber的帖子,我所设想的更清晰的输出是这样的:

> git log -p --name-only --grep=<string>
a/b/c/d/e/f/a.java
a/b/c/d/e/f/b.java
a/b/c/d/e/c.java
a/b/c/f.java
a/b/c/d/e/f/s/t.java

顺便说一句,如果有一个开始学习git命令的好地方,请给我指出。谢谢。

为什么这个问题与已经问过的其他问题不重复:我不希望提交内容,只是他的更改文件没有重复文件名(如果它们在多个提交中使用过)。

1 个答案:

答案 0 :(得分:2)

尝试将-p --name-status添加到您的git log命令中。

  • -p告诉git log为列出的每个提交都包括一个补丁(diff)。
  • --name-status告诉差异生成仅在差异中包含每个文件的名称和状态(新的,更改的,重命名的,已删除的等),而不是每个文件的完整差异。

那么就您而言...

git log -p --name-status --grep=<string>

如果您不关心每个文件的受影响方式,而只是想触摸文件列表,则可以使用--name-only而不是--name-status

有兴趣了解git log的更多选项吗?看看git-log manpage,它也可以通过您的终端机上的git help log获得。

不过是文件列表

我们可以添加一些其他选项来清除所有提交信息,然后删除重复的条目:

git log -p --name-only --format="" --grep=<string> | sort | uniq

这应导致输出仅是由至少一个与grep字符串匹配的提交触及的文件的唯一列表。