查找添加了与glob模式匹配的文件的Git提交



是否有一个Git命令可以找到添加了与模式匹配的文件的第一个提交?

例如,假设我想找到第一个添加了与模式path/prefix/*/subpath/*匹配的文件的提交。我发现,可以通过组合git rev-list来找到在固定路径下添加文件的提交(例如,path/prefix(,迭代提交以列出他们通过git diff-tree添加的文件,并使用grep来找到与给定模式匹配的文件(例如/subpath/(:

for COMMIT in $(git rev-list 
--reverse 
--topo-order 
HEAD 
path/prefix)
do
git diff-tree 
--diff-filter A 
--name-only 
--no-commit-id 
-r "${COMMIT}" |
grep -q "/subpath/" && echo "${COMMIT}" && break
done

有更好的方法吗?

"更好";在…的眼中。。。runner,但您可以使用git logheadtail执行此操作。我们从基本的开始:

git log <options> --diff-filter=A --format=%H -- 'path/prefix/*/subpath/*'

其转储所有散列ID(如果需要,则添加--topo-order,如果需要,添加--reverse(。然后,我们只截取除最后一个(如果不使用--reverse(或第一个(如果使用--reverse(之外的所有内容:

(the git log command) | tail -n 1

这通常会更快,因为git log可以快速消除非候选,但有时可能会更慢。

最新更新