我已经能够使用以下命令在提交消息中打印出包含特定字符串的所有日志:
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命令的好地方,请给我指出。谢谢。
为什么这个问题与已经问过的其他问题不重复:我不希望提交内容,只是他的更改文件没有重复文件名(如果它们在多个提交中使用过)。
答案 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字符串匹配的提交触及的文件的唯一列表。