是否有添加git show lines,更改行和删除行的方法?

时间:2012-03-29 20:50:28

标签: git

“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)?我并不真正关心区分添加或删除的行。

5 个答案:

答案 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)

  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
    

答案 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 --statdiffstat之间的一个主要区别: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~