Git Diff标题上的数字是什么意思?

时间:2011-06-28 15:07:39

标签: diff

每次运行git diff时,对于我所做的每一个更改,我都会得到一些带数字的标题,例如:

@@ -169,14 +167,12 @@ function Browser(window, document, body, XHR, $log) {.....

我想知道这四个数字是什么意思?我猜-169意味着后面的这段特殊代码最初是在第169行,但现在是167? 14和12是什么意思?

3 个答案:

答案 0 :(得分:42)

标头称为变更集或hunk。每个块都以一行开头,该行包含在@@中,文件中的行或行范围from,no-of-lines(使用-)和之后(使用+)更改。之后来自文件的行。以-开头的行将被删除,添加以+开头的行。修补程序修改的每一行都包含前后3行上下文。

添加内容如下:

@@ -75,6 +103,8 @@
 foo
 bar
 baz
+line1
+line2
 more context
 and more
 and still context

这意味着,在第78行(= 75 + 3行上下文)之前的原始文件中添加两行。在所有变化之后,这些将是106行(= 103 + 3行上下文)到107 请注意from数字的差异(-75 vs +103),这意味着此文件在此特定块之前还有其他更改,即添加了28(103 - 75)行代码。

删除如下所示:

@@ -75,7 +75,6 @@
 foo
 bar
 baz
-line1
 more context
 and more
 and still context

这意味着,删除原始文件中的第78行(= 75 + 3行上下文)。在所有更改后,未更改的上下文将在第75行到第80行 请注意,此块中的from个数字相等(-75和+75),这意味着在此块之前没有更改,或者先前更改中添加和删除的行数量相同。

最后,更改如下所示:

@@ -70,7 +70,7 @@
 foo
 bar
 baz
-red
+blue
 more context
 and more
 still context

这意味着,在所有更改之前更改文件中的第73行(= 70 + 3行上下文),其中包含红色到蓝色。所有更改后,更改的行也是文件中的第73行(= 70 + 3行上下文)。

Credit goes to Markus Bertheau

答案 1 :(得分:6)

  

我想知道这四个数字是什么意思?

让我们分析一个简单的例子

格式与DWASMod.dll统一差异基本相同。

我们从1到16的数字开始,删除2,3,14和15:

diff -u

输出:

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')

@@ -1,6 +1,4 @@ 1 -2 -3 4 5 6 @@ -11,6 +9,4 @@ 11 12 13 -14 -15 16 表示:

  • @@ -1,6 +1,4 @@:此作品对应第一个文件的第1行到第6行:

    -1,6

    1 2 3 4 5 6 表示&#34; old&#34;,因为我们通常将其作为-调用。

  • diff -u old new表示此部分对应于第二个文件的第1行到第4行。

    +1,4表示&#34; new&#34;。

    我们只有4行代替6行,因为删除了2行!新的大块头只是:

    +
第二个大块的

1 4 5 6 类似:

    旧文件上的
  • ,我们有6行,从旧文件的第11行开始:

    @@ -11,6 +9,4 @@
  • 在新文件中,我们有4行,从新文件的第9行开始:

    11
    12
    13
    14
    15
    16
    

    请注意,行11 12 13 16 是新文件的第9行,因为我们已经删除了前一个块上的2行:2和3.

答案 2 :(得分:3)

要点:

  • 假设git diff将输出[0-3]上下文行[之前/之后] [第一个/最后一个]更改

@@ - [original file's number of first line displayed],[context lines + removed lines] + [changed file's number of first line displayed],[context lines + added lines] @@