git:找到最大的提交

问题描述 投票:0回答:3

在 git 存储库中找到最大提交(即引入最多更改的提交,例如计算为添加/删除行数)的方法是什么?

请注意,我真的想要最大的提交,而不是最大的文件,所以git find fat commit在这里没有帮助。

git
3个回答
15
投票

您可以使用

git log --format=format:"%H" --shortstat
。 它会输出类似的内容

b90c0895b90eb3a6d1528465f3b5d96a575dbda2
 2 files changed, 32 insertions(+), 7 deletions(-)

642b5e1910e1c2134c278b97752dd73b601e8ddb
 11 files changed, 835 insertions(+), 504 deletions(-)

// other commits skipped

看起来像是一个容易解析的文本。


11
投票

对于任何想要获得最大到最小提交的简单列表(按提交中所做的更改量)的人,我采用了 @max 的答案并对结果进行了解析和排序。

git log --format=format:"%H" --shortstat | perl -00 -ne 'my ($hash, $filesChanged, $insertions, $deletions) = $_ =~ /(?:[0-9a-f]+\n)*([0-9a-f]+)\n(?: (\d+) files? changed,)?(?: (\d+) insertions?...,?)?(?: (\d+) deletions?...)?/sg; print $hash, "\t", $insertions + $deletions, "\n"' | sort -k 2 -nr

这需要所有提交,将每个提交的插入和删除数量加在一起,然后按从最高到最低的顺序对列表进行排序。要仅获取前十个最大的提交,请将

 | head -10
添加到末尾。


0
投票

我的解决方案:

shell脚本:

git log  --after="2024-10-01" --pretty=format:"%H - %ad :" --date=format:"%a %b %d %T %Y %z" | while read line
do
    commit_hash=$(echo $line | cut -d' ' -f1)
    commit_date=$(echo $line | cut -d' ' -f3-)
    commit_size=$(git show --format=format: --stat $commit_hash | tail -1 | awk '{print $4}')
    echo "$commit_date $commit_size $commit_hash"
done |   sort -nr --field-separator=' ' --key=8 | head -20

输出:

四 10 10 09:13:18 2024 +0800 : 28530 dd70787ad5121c0884e1884fa4fdfe4c1b044267
四 11 14 07:14:42 2024 +0800 : 5422 d6adca7d57a04e23e3076181b5a56d370b8fb92b
四 11 14 07:57:02 2024 +0800 : 5327 5cdf72dcb933b5da4e379e31f3a103352446d771
三 10 02 10:36:50 2024 +0800 : 370 af1ca597b18eb1d80d75401819afefaf74ecb9ef
© www.soinside.com 2019 - 2024. All rights reserved.