协慌网

登录 贡献 社区

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

有没有简单的方法来计算 Git 中两次提交之间更改的行数?

我知道我可以做一个git diff ,并计算行数,但这似乎很乏味。我还想知道如何做到这一点,包括仅自己提交的行数。

答案

您需要git diff --stat选项,或者如果您想在脚本中解析它,请使用--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还可以通过多种其他方式选择提交 - 查看文档。您可能会对--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

仅提供更改和添加的行数。这仅适用于未分级的更改。与分支进行比较:

git diff --shortstat some-branch

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