我怎样才能计算git中两次提交之间改变的行数?

有没有简单的方法来计算git中两个提交之间改变的行数? 我知道我可以做一个git diff ,并计算行数,但是这似乎很单调。 我也想知道我怎么能做到这一点,只包括我自己提交的行数。

你需要git diff--stat选项,或者如果你想在脚本中parsing这个选项,可以使用--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--shortstatgit log也可以用其他方法select提交 – 查看文档 。 你可能会感兴趣的东西像--since (而不是指定提交范围,只select提交自上周以来)和--no-merges (合并提交实际上不引入更改),以及漂亮的输出选项( --pretty=oneline, short, medium, full... )。

这是一个单线程来获得全部的变化,而不是从git日志的每个提交更改(根据需要更改提交select选项 – 这是提交从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日志打印一些关于提交的标识信息;我随意select了散列,然后用awk只挑出三个字段的行,这些字段是带有stat信息的行)

对于懒惰的, git log --stat ;)

 git diff --stat commit1 commit2 

编辑:你必须指定提交(没有参数比较工作目录与索引)。 例如

 git diff --stat HEAD^ HEAD 

比较HEAD的父母和HEAD

git diff --shortstat

只给你改变和添加的行数。

假设你想比较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(-) 

另一种在特定时间段内获取所有更改日志的方法

 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