如何计算git中两次提交之间更改的行数?

时间:2010-03-27 04:02:59

标签: git

有没有简单的方法来计算git中两次提交之间更改的行数?我知道我可以做git diff,并计算线条,但这似乎很乏味。我也想知道如何做到这一点,包括我自己在行计数中的提交。

12 个答案:

答案 0 :(得分:933)

您需要--stat的{​​{1}}选项,或者如果您希望在脚本中解析此git diff选项。

--numstat

git diff --stat <commit-ish> <commit-ish> 生成您在合并后习惯看到的人类可读输出; --stat生成一个很好的表格布局,脚本可以轻松解释。

我错过了你想要同时在多个提交上执行此操作 - 这是--numstat的任务。 Ron DeVera对此有所了解,但实际上你可以做的比他提到的要多得多。由于git log内部调用diff机器以打印请求的信息,因此您可以为其提供任何diff stat选项 - 而不仅仅是git log。您可能想要使用的是:

--shortstat

但您也可以使用git log --author="Your name" --stat <commit1>..<commit2> --numstat--shortstat还可以通过其他各种方式选择提交 - 查看documentation。您可能对git log之类的东西感兴趣(而不是指定提交范围,只选择上周以来的提交)和--since(合并提交实际上不会引入更改),以及漂亮的输出选项(--no-merges)。

这是一个单行程序来获取总更改而不是来自git log的每次提交更改(根据需要更改提交选择选项 - 这是您提交的,从commit1到commit2):

--pretty=oneline, short, medium, full...

(你必须让git log打印一些关于提交的识别信息;我随意选择了哈希,然后使用awk只选择带有三个字段的行,这些是带有统计信息的字段)

答案 1 :(得分:165)

对于懒惰,请使用git log --stat

答案 2 :(得分:118)

git diff --shortstat

为您提供更改和添加的行数。

答案 3 :(得分:39)

git diff --stat commit1 commit2

编辑:您还必须指定提交(没有参数,它将工作目录与索引进行比较)。 E.g。

git diff --stat HEAD^ HEAD

HEAD的父级与HEAD进行比较。

答案 4 :(得分:16)

假设您要比较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(-)

答案 5 :(得分:11)

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

{
"coord": {},
"weather": [],
"base": "stations",
"main": {
    "temp": 53.2,
    "pressure": 1021,
    "humidity": 71,
    "temp_min": 44.6,
    "temp_max": 57.2
},
"visibility": 16093,
}

输出:

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(-)

答案 6 :(得分:6)

我只是为自己解决了这个问题,所以我将分享我的想法。这是最终结果:

> 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)上的可执行脚本中,然后在{{1}中使用别名中的脚本}:

.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命令。

答案 7 :(得分:2)

git log --numstat 只给你数字

答案 8 :(得分:2)

如果要查看更改,包括分支和另一个分支之间已更改的行数,

git diff the_other_branch_name --stat

答案 9 :(得分:1)

尽管以上所有答案都是正确的,但如果您需要数次最近的提交,则可以方便地使用下面的答案

以下是获取最近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

答案 10 :(得分:0)

如果要检查两个分支或提交之间的插入,删除和提交的次数。

使用提交ID:

git log <commit-id>..<commit-id> --numstat --pretty="%H" --author="<author-name>" | awk 'NF==3 {added+=$1; deleted+=$2} NF==1 {commit++} END {printf("total lines added: +%d\ntotal lines deleted: -%d\ntotal commits: %d\n", added, deleted, commit)}'

使用分支机构:

git log <parent-branch>..<child-branch> --numstat --pretty="%H" --author="<author-name>" | awk 'NF==3 {added+=$1; deleted+=$2} NF==1 {commit++} END {printf("total lines added: +%d\ntotal lines deleted: -%d\ntotal commits: %d\n", added, deleted, commit)}'

答案 11 :(得分:0)

关于最后一次提交的简短统计:

git diff --shortstat HEAD~1 HEAD

就我而言,这给了我以下信息:

 254 files changed, 37 insertions(+), 10773 deletions(-)

插入和删除是受影响的行。