在 git diff 中,我可以只显示后面没有添加的删除内容吗?

问题描述 投票:0回答:4

我希望能够在 git diff 中显示后面没有添加的删除内容。 也就是说,仅显示后面没有

-
行的
+
行。这可能吗?

git diff
4个回答
1
投票
git diff | awk '/^@/{ if(s) print p; s = 1; p="" } 
    s == 1 && /^\+/ { s = 0 } 1 {p = sprintf("%s\n%s", p, $0)} 
    END { if (s) print p }' s=2

0
投票

用一点黑魔法,是的。

步骤1

我们需要明白这一点

git diff

列出文件、更改集、删除、添加以及它们周围的一些行

步骤2

我们需要删除所有多余的行,以便我们只获取文件及其内部的更改,如下所示:

git diff | grep '^\(+++\|---\|-\|+\)'

步骤3

编写一个程序,运行步骤 2 中的命令并显示结果。我知道这还不是解决方案,但您绝对需要首先执行此步骤,这样我们就知道输入和输出正在工作。

步骤4

现在,让我们应用过滤。该算法将执行一个非常简单的过滤器

deletedLines <- empty
for each line
    if (line starts with --- or +++) then add line to output
    else if (line starts with -) deletedLines.add(line)
    else
        if (line starts with + but not with +++) then clear deletedLines
        else add deletedLines to output
end for

0
投票

另一种解决方案,在一行中,仅使用正则表达式。在这里,我使用

rg
,但任何支持多行匹配和逆匹配(分别为
-U
-v
)的 grep 工具都可以工作。

git diff | rg '^(\+ |- ).*' | rg -vU '^-(.*)\n\+(.*)\n'

0
投票
git diff --numstat | grep "^0"

来自

git-diff
联机帮助页:

--numstat 选项提供 diffstat(1) 信息,但其设计目的是 以便更轻松地使用机器。 --numstat 输出中的条目看起来 像这样:

1       2       README
3       1       arch/{i386 => x86}/Makefile

即从左到右:

  1. 添加的行数;

  2. 一个选项卡;

  3. 删除的行数;

  4. 一个选项卡;

  5. 路径名(可能带有重命名/复制信息);

  6. 换行符。

© www.soinside.com 2019 - 2024. All rights reserved.