【问题标题】:How can I retrieve all commits that changed files with one or two kinds of extensions?如何检索所有更改了具有一种或两种扩展名的文件的提交?
【发布时间】:2021-12-09 11:57:54
【问题描述】:

如何检索所有更改了具有一种或两种扩展名的文件的提交,例如“.YAML”和“.JSON”?

【问题讨论】:

    标签: git msr


    【解决方案1】:
    git log --no-merges --oneline --name-status -- :*.yaml :*.json
    

    --oneline--name-status 在这里基本上是养眼的。

    --no-merges 的原因是,合并是合并历史中的所有更改,因此在该合并中更改的所有文件来自任一父项。但是由于您没有限制回退,因此无论如何您都会看到最初进行这些更改的提交(git log 知道这一点,并且通常不会显示合并提交的差异,因为这会变得重复并且越来越糟糕- 随着历史的扩大而变得无用)。

    --first-parent 而不是带有选定路径的--no-merges 告诉您哪些文件通过(不再排除的)合并仅相对于第一个父项进行了更改;它不会向您显示更改这些文件的单个合并提交,而是向您显示将这些更改带入您已签出的第一父历史记录的合并。

    git log 带有路径,而 --first-parent--no-merges 都不能用作取证查询。

    【讨论】:

    • 你的 git 命令中的这个冒号似乎非常有用。它的含义是什么?
    • @zkoza 这是 git 的“pathspec”特殊语法的标记,比如git help glossary 并寻找它。例如,您可以要求它检查特定的.gitattributes,并且只使用标记为您想要的方式的路径。
    • 非常感谢。我已经阅读了文档并做了一些实验。 :/*.yaml :/*.json 不是更好吗?
    • @zkoza 取决于你想要什么。前导斜杠将路径锚定在工作树根目录,因此如果这些是您唯一感兴趣的 yaml/json 文件,请使用它。
    • 但这不是 OP 所要求的吗?斜线使搜索在 git 项目根目录 及以下 中找到所有 yaml 和 json 文件,无论搜索来自哪个目录。没有它,搜索将返回当前目录及以下目录中的值。只是一个评论,也许没有实际意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多