我怎样才能计算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
或--shortstat
。 git 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