有没有办法让git显示添加的行、更改的行和删除的行?

soat7uwm  于 2022-12-10  发布在  Git
关注(0)|答案(5)|浏览(212)

git diff --statgit 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行不同。
有没有办法得到增量LOC(在这个例子中是26)?我真的不关心添加或删除的行之间的区别。

mbzjlibv

mbzjlibv1#

您可以用途:

git diff --numstat

以获得数字DIFF信息。
至于将修改与添加和删除对分开,--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

它有点冗长,所以您可能希望在自己的脚本中解析它。

unftdfkk

unftdfkk2#

1.如果你想知道由id为commit-id的提交添加/更改/删除的行,你可以使用

git show commit-id --stat

git diff commit-id-before commit-id --stat

1.如果你想知道由一系列提交添加/更改/删除的行,你可以使用

git diff commit-id1 commit-id2 --stat

1.如果您想知道每次提交添加/更改/删除的行,可以使用

git log --stat
mqxuamgl

mqxuamgl3#

您可以使用diffstat来显示已修改的行数。例如:

git diff HEAD c9af3e6136e8 | diffstat -Cm

-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}),而git diff --stat可以通过使用-M--find-renames)选项或在git配置文件中设置diff.renames来显示此信息(请参阅man git-config)。

rhfm7lfc

rhfm7lfc4#

如果您的所有文件都已暂存以供提交,则--numstat将显示如下:

git diff --numstat --cached

示例性输出

32      32      project.pbxproj

--numstat [...]显示添加和删除的行数

qni6mghb

qni6mghb5#

git使用“unifieddiff”作为diff格式,它只显示添加和删除的行,你必须做一些外部的操作来得到一个显示添加、删除和更改信息的diff。
https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git 提供了一个脚本链接,该脚本允许运行常规的“diff”--从该脚本中,您可以生成一个“context”diff输出。Context diff确实显示了添加、删除和更改的行,这应该允许您获得所需的数据。

相关问题