0

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

4

1 回答 1

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

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

于 2014-05-19T11:11:53.690 回答