Answers:
您需要使用的--stat选项git diff,或者如果您想在脚本中解析该--numstat选项,请使用该选项。
git diff --stat <commit-ish> <commit-ish>
--stat生成合并后您经常看到的易于理解的输出;--numstat产生一个很好的表布局,脚本可以轻松地解释。
我莫名其妙地错过了您希望同时执行多个提交的操作-这是的任务git log。罗恩·德维拉(Ron DeVera)谈到了这一点,但实际上您可以做的比他提到的要多得多。由于git log内部调用了diff机制以打印请求的信息,因此您可以为它提供任何diff stat选项-而不仅仅是--shortstat。您可能想使用的是:
git log --author="Your name" --stat <commit1>..<commit2>
但您也可以使用--numstat或--shortstat。git log也可以通过其他方式选择提交-看看文档。您可能对以下内容感兴趣--since(而不是指定提交范围,仅从上周开始选择提交)和--no-merges(合并提交实际上不会引入更改),以及漂亮的输出选项(--pretty=oneline, short, medium, full...)。
这是从git日志中获取总更改而不是每次提交更改的一种方法(根据需要更改提交选择选项-这是您的提交,从commit1到commit2):
git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'
(您必须让git log打印有关提交的一些标识信息;我随意选择了哈希,然后使用awk仅选择了具有三个字段的行,这些字段是具有stat信息的行)
git diff --shortstat <commit1> <commit2>是我想要的那个
--since和--until是一样的东西:yesterday,1 month 2 weeks 3 days 1 hour 1 second ago或1979-02-26 18:30:00
<commit-ish>-它可以与代表提交的任何内容一起使用,包括一般的字面提交,分支,标签和引用。另请参见stackoverflow.com/questions/23303549/…–
对于懒惰者,请使用git log --stat。
-10以显示前十次提交。
Q以返回到终端。
git diff --stat commit1 commit2
编辑:您还必须指定提交(不带参数,它将工作目录与索引进行比较)。例如
git diff --stat HEAD^ HEAD
比较的父HEAD与HEAD。
diff-index- diff前端可以处理所有事情;我相信的情况diff-index已包含--cached/--staged在内。(而且diff-index正如OP所要求的,没有办法用来比较两个任意提交。)
git diff --stat HEAD
HEAD~n,而不只是父项进行进一步的比较,n您想返回多远。git diff --stat HEAD~5 HEAD将显示相对于HEAD的最后5次提交的合并统计信息。
假设要比较abcd123(第一次提交)和wxyz789(最后一次提交)之间的所有提交,包括:
git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"
这给出了简洁的输出,如:
abcd123 Made things better
3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
26 files changed, 53 insertions(+), 58 deletions(-)
--shortstat标志很棒,可与一起使用git diff(不是git log)。
在指定时间段内获取所有更改日志的另一种方法
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"
输出:
2637cc736 Revert changed code
1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
2 files changed, 4 insertions(+), 11 deletions(-)
输出内容很长时,可以导出到文件以提高可读性
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt
尽管以上所有答案都是正确的,但如果您需要计数最近的多次提交,则以下一个方便使用
下面的一个是获取最近5次提交的计数
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat
获取最近10次提交的计数
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
通用-用您需要的最后多次提交的数量更改N
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
获取自开始以来所有提交的计数
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
git log --numstat只给你数字
我只是为自己解决了这个问题,所以我将分享我的想法。这是最终结果:
> git summary --since=yesterday
total: 114 file changes, 13800 insertions(+) 638 deletions(-)
基本命令如下所示:
git log --numstat --format="" "$@" | awk '{files += 1}{ins += $1}{del += $2} END{print "total: "files" files, "ins" insertions(+) "del" deletions(-)"}'
注意$@log命令中的传递您的参数,例如--author="Brian"或--since=yesterday。
转义awk将其放入git别名很麻烦,因此,我将其放入路径(~/bin/git-stat-sum)的可执行脚本中,然后在my的别名中使用脚本.gitconfig:
[alias]
summary = !git-stat-sum \"$@\"
而且效果很好。最后要注意的是,file changes文件更改的数量而不是唯一文件更改的数量。那就是我一直在寻找的东西,但可能并非您所期望的。
这是另外两个例子
git summary --author=brian
git summary master..dev
# combine them as you like
git summary --author=brian master..dev
git summary --all
确实,您应该能够用替换任何git log命令git summary。