【问题标题】:How to list all files those don't change since a specific GIT commit如何列出自特定 GIT 提交以来未更改的所有文件
【发布时间】:2014-07-07 03:59:09
【问题描述】:

很久以前有一个大的提交,从那时起发生了很多变化。如何列出迄今为止该提交未更改的所有文件?

【问题讨论】:

    标签: git git-log gitlist


    【解决方案1】:

    您可以使用以下命令链:

    git ls-files | grep -v "$(git diff --name-only <from-commit> <to-commit>)"
    

    git ls-files 列出所有受版本控制的文件,而git diff --name-only &lt;from-commit&gt; &lt;to-commit&gt; 将列出在指定提交范围内发生更改的文件。

    grep -v 返回所有与给定模式不匹配的行(反向匹配)。

    希望有帮助!


    如果您遇到 Argument list too long 错误问题,那么您可以使用以下 shell 脚本:

    #!/bin/bash
    
    git diff --name-only $1 $2 | {
        files="$(git ls-files)"
    
        while read line
        do
            files=$(echo "$files" | grep -v $line)
        done
    
        echo "$files"
    }
    

    此脚本每次迭代都会从所有文件列表中排除一个文件路径,因此您永远不会遇到Argument list too long 错误。

    您可以通过将脚本保存到文件中来使用该脚本,并使用应从结果中排除其文件的提交范围的提交哈希执行它。

    【讨论】:

    • 谢谢,它适用于小提交,但对于太大的提交,grep 会抛出 Argument list too long
    • @jwall 我已经用另一种方式编辑了这篇文章来完成同样的事情。这应该适合你。
    猜你喜欢
    • 2016-09-09
    • 2011-04-11
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2020-02-14
    • 2016-12-24
    • 2011-02-18
    相关资源
    最近更新 更多