如何列出自特定GIT提交以来不会发生变化的所有文件

时间:2014-05-19 08:55:04

标签: git git-log gitlist

过去很久以前就有很大的提交,从那以后发生了很多变化。如何列出到目前为止尚未更改该提交的所有文件?

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令链:

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

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

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错误。

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