【发布时间】:2014-07-07 03:59:09
【问题描述】:
很久以前有一个大的提交,从那时起发生了很多变化。如何列出迄今为止该提交未更改的所有文件?
【问题讨论】:
很久以前有一个大的提交,从那时起发生了很多变化。如何列出迄今为止该提交未更改的所有文件?
【问题讨论】:
您可以使用以下命令链:
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 错误。
您可以通过将脚本保存到文件中来使用该脚本,并使用应从结果中排除其文件的提交范围的提交哈希执行它。
【讨论】:
Argument list too long。