代码之家  ›  专栏  ›  技术社区  ›  Rajath

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

git
  •  -1
  • Rajath  · 技术社区  · 6 年前

    我已经能够在提交消息中打印包含特定字符串的所有日志,方法是:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Amber    6 年前

    尝试添加 -p --name-status 对你 git log 命令。

    • -p 讲述 GIT日志 为列出的每个提交包含一个补丁(diff)。
    • --name-status 告诉diff生成只包括diff中每个文件的名称和状态(新建、更改、重命名、删除等),而不包括每个文件的更改的完整diff。

    所以在你的情况下…

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

    如果你不在乎 怎样 每个文件都受到影响,但只需触摸文件列表,就可以使用 --name-only 而不是 -姓名状态 .

    有兴趣了解更多的选择 GIT日志 ?看看 git-log manpage ,也可以通过 git help log 在你的终点站。

    除了文件列表什么都没有

    我们可以添加更多选项来删除所有提交信息,然后删除重复条目:

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

    这将导致输出结果是一个唯一的文件列表,其中至少有一个与grep字符串匹配的提交涉及到了该列表。