“git diff --stat”和“git log --stat”显示如下内容:
$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07
app/controllers/application_controller.rb | 34 +++-------------------------
1 files changed, 4 insertions(+), 30 deletions(-)
但该提交中真正发生的事情是更改了4行并删除了26行,这与添加4行并删除30行不同。
有没有办法获得delta LOCs(在这种情况下为26)?我并不真正关心区分添加或删除的行。
答案 0 :(得分:83)
您可以使用:
git diff --numstat
获取数字差异信息。
至于将修改与添加和删除对分开,--word-diff
可能有所帮助。你可以尝试这样的事情:
MOD_PATTERN='^.+(\[-|\{\+).*$' \
ADD_PATTERN='^\{\+.*\+\}$' \
REM_PATTERN='^\[-.*-\]$' \
git diff --word-diff --unified=0 | sed -nr \
-e "s/$MOD_PATTERN/modified/p" \
-e "s/$ADD_PATTERN/added/p" \
-e "s/$REM_PATTERN/removed/p" \
| sort | uniq -c
这有点啰嗦,所以你可能想要在自己的脚本中解析它。
答案 1 :(得分:42)
如果您想知道提交添加/更改/删除的行
id commit-id
,您可以使用
git show commit-id --stat
或
git diff commit-id-before commit-id --stat
如果你想知道一个范围添加/更改/删除的行 提交,你可以使用
git diff commit-id1 commit-id2 --stat
如果您想知道每次提交添加/更改/删除的行数, 你可以用
git log --stat
答案 2 :(得分:4)
您可以使用diffstat
来显示已修改的行数。例如:
git diff HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 | diffstat -C -m
-C
选项用于获取彩色输出; -m
选项用于显示修改的行数。
样本输出:
app/controllers/application_controller.rb | 30 -------------------!!!
1 files changed, 0 insertions(+), 26 deletions(-), 4 modifications(!)
修改的行数是近似的,如man diffstat
所说:
-m 合并补丁文件的每个“块”中的插入/删除计数,以近似估计已修改的行数。
git diff --stat
和diffstat
之间的一个主要区别:diffstat
不显示文件移动/重命名(例如app/{a.rb => b.rb}
)。
答案 3 :(得分:2)
git使用"统一" diff,只有添加和删除的行,作为diff格式。您必须在外部执行某些操作才能获得显示添加,删除和更改信息的差异。
https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git提供了一个脚本链接,允许运行常规的旧"差异" - 从中你可以生成"context" diff输出。 Context diff确实显示添加,删除和更改的行,这些行应该允许您获取所需的数据。
答案 4 :(得分:1)
如果所有文件都已准备提交,请看--numstat
像这样:
git diff --numstat HEAD~