是否有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有更好的办法吗?
发布于 2022-03-18 12:10:56
“更好”在.运行程序,但是您可以使用git log和head或tail来完成这一任务。我们从以下几个基本问题开始:
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可以快速消除非候选人,但有时可能会慢一些。
https://stackoverflow.com/questions/71526649
复制相似问题