有没有简单的方法来计算git中两次提交之间更改的行数?我知道我可以做git diff,并计算线条,但这似乎很乏味.我也想知道如何做到这一点,包括我自己在行计数中的提交.
Cas*_*bel 1027
您需要--stat选项git diff,或者如果您希望在脚本中解析此--numstat选项.
git diff --stat <commit-ish> <commit-ish>
Run Code Online (Sandbox Code Playgroud)
--stat产生您在合并后习惯看到的人类可读输出; --numstat产生一个很好的表格布局,脚本可以轻松解释.
我不知何故错过了你想要同时在多次提交上做这件事 - 这是一项任务git log.Ron DeVera对此有所了解,但实际上你可以做的比他提到的要多得多.由于git log内部调用diff机器以打印请求的信息,因此您可以为其提供任何diff stat选项 - 而不仅仅是--shortstat.您可能想要使用的是:
git log --author="Your name" --stat <commit1>..<commit2>
Run Code Online (Sandbox Code Playgroud)
但你也可以使用--numstat或者--shortstat.git log也可以通过其他各种方式选择提交 - 查看文档.您可能对以下内容感兴趣--since(而不是指定提交范围,仅选择上周以来的提交)和--no-merges(合并提交实际上不会引入更改),以及漂亮的输出选项(--pretty=oneline, short, medium, full...).
这是一个单行程序来获取总更改而不是来自git log的每次提交更改(根据需要更改提交选择选项 - 这是您提交的,从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)}'
Run Code Online (Sandbox Code Playgroud)
(你必须让git log打印一些关于提交的识别信息;我随意选择了哈希,然后使用awk只选择带有三个字段的行,这些是带有stat信息的字段)
Tho*_*mas 176
对于懒惰,使用git log --stat.
ork*_*den 149
git diff --shortstat
Run Code Online (Sandbox Code Playgroud)
为您提供更改和添加的行数.
Mat*_*hen 45
git diff --stat commit1 commit2
Run Code Online (Sandbox Code Playgroud)
编辑:您还必须指定提交(没有参数,它将工作目录与索引进行比较).例如
git diff --stat HEAD^ HEAD
Run Code Online (Sandbox Code Playgroud)
比较的父HEAD与HEAD.
Spy*_*yto 45
有关上次提交的简短统计信息:
git diff --shortstat HEAD~1 HEAD
Run Code Online (Sandbox Code Playgroud)
就我而言,这为我提供了以下信息:
254 files changed, 37 insertions(+), 10773 deletions(-)
Run Code Online (Sandbox Code Playgroud)
插入和删除都是受影响的行。
小智 20
总结这一年的好东西
git diff --shortstat <first commit number of the year> HEAD
Run Code Online (Sandbox Code Playgroud)
获取结果 270 个文件已更改,19175 个插入(+),1979 个删除(-)
Ron*_*era 18
假设您要比较abcd123(第一次提交)和wxyz789(最后一次提交)之间的所有提交,包括:
git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"
Run Code Online (Sandbox Code Playgroud)
这给出了简洁的输出,如:
abcd123 Made things better
3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
26 files changed, 53 insertions(+), 58 deletions(-)
Run Code Online (Sandbox Code Playgroud)
小智 13
另一种在指定的时间段内获取所有更改日志的方法
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"
Run Code Online (Sandbox Code Playgroud)
输出:
2637cc736 Revert changed code
1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
2 files changed, 4 insertions(+), 11 deletions(-)
Run Code Online (Sandbox Code Playgroud)
使用长输出内容,您可以导出到文件以获得更多可读性
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt
Run Code Online (Sandbox Code Playgroud)
und*_*ned 12
我刚刚为自己解决了这个问题,所以我将分享我的想法。这是最终结果:
> git summary --since=yesterday
total: 114 file changes, 13800 insertions(+) 638 deletions(-)
Run Code Online (Sandbox Code Playgroud)
底层命令如下所示:
git log --numstat --format="" "$@" | awk '{files += 1}{ins += $1}{del += $2} END{print "total: "files" files, "ins" insertions(+) "del" deletions(-)"}'
Run Code Online (Sandbox Code Playgroud)
请注意$@log 命令中的 以传递您的参数,例如--author="Brian"或--since=yesterday。
转义 awk 以将其放入 git 别名很麻烦,因此,我将其放入路径 ( ~/bin/git-stat-sum)上的可执行脚本中,然后在我的别名中使用脚本.gitconfig:
[alias]
summary = !git-stat-sum \"$@\"
Run Code Online (Sandbox Code Playgroud)
而且效果很好。最后要注意的是file changes文件更改的数量,而不是更改的唯一文件的数量。这就是我一直在寻找的,但它可能不是你所期望的。
这是另外一两个例子
git summary --author=brian
git summary master..dev
# combine them as you like
git summary --author=brian master..dev
git summary --all
Run Code Online (Sandbox Code Playgroud)
真的,您应该能够将任何git log命令替换为git summary.
小智 5
如果您想查看更改,包括您的分支和另一个分支之间更改的行数,
git diff the_other_branch_name --stat
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
255307 次 |
| 最近记录: |