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
。