2012-03-29 50 views
42

“git的差异--stat”和“git的日志--stat”显示之类的东西:有没有添加git显示行,更改行和删除行的方法?

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 
app/controllers/application_controller.rb | 34 +++------------------------- 
1 files changed, 4 insertions(+), 30 deletions(-) 

但是到底发生在提交的是,4行被改变和26行被删除比不同添加4行并删除30.

有没有获得增量LOC(本例中为26)的方法?我并不在乎区分添加或删除的行。

回答

45

您可以使用:

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 

这有点冗长,所以你可能需要解析它,而不是你自己的脚本。

+0

感谢quornian但numstat给人如出一辙的信息作为统计,增删。 – 2012-03-30 14:19:36

+0

更新了我的答案,以包含'--word-diff'的示例使用。这可能更有用。 – quornian 2012-04-01 19:53:15

+0

谢谢!你编辑的答案很好。我想看看在两个特定的提交之间添加/修改/删除了多少行。对于其他可能希望做同样的事情,只需将命令中的分支名称放在命令中,如:'git diff commit1 commit2 --word-diff ...'其中commit1/2是SHA1,分支,标签等。 。 – 2013-11-24 19:04:32

1

git使用“统一”差异,它只是添加和删除行,作为diff格式。你必须做一些外部的事情来获得显示添加,删除和更改信息的差异。

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git给出了一个脚本的链接,该脚本允许运行常规的“差异” - 并且可以生成"context" diff输出。上下文差异确实显示添加,删除和更改的行,这应该允许您获取所需的数据。

13
  1. 如果你想知道的线条添加/更改/删除者提交与 ID commit-id,你可以使用

    git show commit-id --stat 
    

    git diff commit-id-before commit-id --stat 
    
  2. 如果您笏到通过 提交知道添加/更改/删除的行,您可以使用

    git diff commit-id1 commit-id2 --stat 
    
  3. 如果你想知道的线条添加/更改/每个删除提交, 你可以使用

    git log --stat