Git diff --stat explanation

52

这里已经很好地解释了Git的pull输出。尽管如此,我仍然不确定文本图表与何相关。

例如:

git diff --stat master HEAD^

输出(截断):

Site/index.php | 118 ++--

虽然修改的行数清楚地显示为118,但文本图表有些难以解释。

这是否与添加和删除行的比率有关?


118 ++--表示总共进行了118次更改。++--(2+,2-或大约50%,50%)表明大约50%的118次更改是新行(118的50%为59个新行),而大约50%的119次更改是删除的行。如果是118 +++--,则会建议大约60%的更改是新行(118次更改的60%总共为70个新行)。或者,作为最后一个示例,118 ++++-,它会建议大约80%的118次更改是新行(118次更改的80%总共为94个新行)。 - Arthur Zennig
118 ++--表示总共进行了118次更改。++--(2+,2-,或大约50%,50%)表示这118次更改中大约有50%是新行(118的50%是59个新行),另外大约50%的更改是删除的行(119个更改中的50%)。 例如,如果是118 +++--,那么大约60%的更改是新行(118次更改中的60%是70个新行)。 或者,最后一个例子,118 ++++-,则表示大约80%的118次更改是新行(118次更改中的80%是94个新行)。 - Arthur Zennig
3个回答

37

是的,它是添加和删除行数的比值。

另请参阅:

man diffstat

1
什么是比例尺?对于所有文件大小来说,100%是否相同? - serby
1
Site/index.php | 118 ++-- 的意思是:在 index.php 上大约删除了 50%,添加了 50%。++-- 指示器不是非常精确。 - Patrick B.
啊,谢谢。我被完全由加号组成的diffstat搞糊涂了。我假设一个比率会以简单的形式显示出来。 - LukasWildas
很遗憾,在Windows上的Git Bash中man diffstat无法使用。 - Tobias Feil

33
git diff --numstat "@{1 day ago}"

参数:

  • diff = 显示差异
  • --numstat = 显示插入和删除的行数
  • @{1 day ago} = 期间。

输出

0   1   WebContent/WEB-INF/tags/Grid.tag
38  30  ant/build.xml
  • 第一列(包含0 38)=已插入
  • 第二列(包含1 30)=已移除

PS:列之间用制表符(\t)分隔。


15

正如我在这里所回答的:

它应该反映出每个列出的文件的更改行数。
加号表示添加,减号表示删除。

118表示更改的行数,-/+给出了删除/添加的比例。
当更改的行数适合一行时,每个添加显示为'+',每个删除显示为'-';
否则,这是一个近似值,例如:

CHANGES.txt     |   47 +++++++++++++++++++++++++++++++++
make-release.py |   77 +++++++++++++++++++++++++++++++++++++++----------------
2 files changed, 102 insertions(+), 22 deletions(-)

CHANGES.txt 中,您可以看到没有 '-',因为有 47 个 '+' 是很多的,您有相应数量的它们(即 100%)。 在 make-release.py 中,您将看到 x39 '+' 表示 55 次添加和 x16 '-' 表示 22 次删除。 与它们的比例完全一样,并且只输出适合屏幕的数量。

每行符号的数量是适合线宽的 GCD 的倍数。

希望这有所帮助。


2
我知道已经有一段时间了,但你有任何想法为什么当有空间时可能不显示总数吗?我有一行显示 | 3 - 但我也有一行显示 | 55 +++---- 所以有三个 - 的空间,但只显示了一个。 - Marie
1
如果差异中的所有更改都可以以1:1比例适合打印,则它们将以1:1打印。但是,如果任何文件中的更改量过长以至于行不能容纳,则所有更改都将成比例缩放。 - Gordon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接