Git 找到更改量最小的提交

Git 找到更改量最小的提交,git,diff,commit,Git,Diff,Commit,让我有一个Git存储库和一个包含文件的目录 我需要在存储库中找到提交(如果有多个这样的提交,那么最后的“最小更改”提交),并将更改行的数量与目录中的文件进行比较(例如,通过diff) 存储库可能很大,提交的数量也很大 如何做到这一点?我想你必须用暴力来解决这个问题。这将是缓慢的 git rev list列出范围内的所有提交git diff--shortstat输出更改的行数和文件数。不幸的是,您无法将提交与外部目录进行比较,因此您必须提交一次目录的内容(例如,在孤立/分离的分支上),或者签出要测

让我有一个Git存储库和一个包含文件的目录

我需要在存储库中找到提交(如果有多个这样的提交,那么最后的“最小更改”提交),并将更改行的数量与目录中的文件进行比较(例如,通过
diff

存储库可能很大,提交的数量也很大


如何做到这一点?

我想你必须用暴力来解决这个问题。这将是缓慢的

git rev list
列出范围内的所有提交
git diff--shortstat
输出更改的行数和文件数。不幸的是,您无法将提交与外部目录进行比较,因此您必须提交一次目录的内容(例如,在孤立/分离的分支上),或者签出要测试的每个提交。我假设将目录作为commit使用会快得多(YMMV)

将所有这些结合起来,您将获得:

git版本列表——全部\
|而read-r提交;做
echo“$(git diff--shortstat“$commit”“$needle”)--$(git log-1--pretty=“格式:%h%ci”“$commit”);
完成|排序-n |头-10
NB.这需要很长时间才能完成。如果您事先知道只有一组有限的提交是候选提交,请将一个范围传递给第一个
rev列表
(例如
branch-a~10..branch-a
,而不是
--all
,以便只比较
branch-a
上最近的10次提交)


needle
是一个变量,包含要比较的孤立提交的id(哈希)
sort-n
执行数字排序,并
head-10
仅选择10个最佳候选项。您可能希望输出完整列表(甚至在排序之前)并将其写入文件。然后,您可以排序并选择最佳的候选项,而无需再次执行所有比较。

到目前为止,您做了哪些尝试?Git提供了
Git diff
,用于显示两个版本之间的更改,并且有。可能感兴趣的是版本控制下的目录吗?它是外部目录吗?请提供有关资料。但我认为您必须强制执行您的解决方案:检查所有提交,比较所有提交,排序,选择最佳匹配。什么构成了你的“改变”?最少的文件数?最少的插入?最少的删除?您想让Git执行重命名检测吗?