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

Cod*_*ier 47 diff

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

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

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

And*_*ovs 46

标头称为变更集或块.每个块都以一行开头,该行包含在@@中,包含from,no-of-lines文件中的行或行范围(带有a -)和after(带有a +)更改.之后来自文件的行.以a开头的行-被删除,以a开头的行+被添加.由补丁修改的每一行被前后三行上下文包围.

添加如下:

@@ -75,6 +103,8 @@
 foo
 bar
 baz
+line1
+line2
 more context
 and more
 and still context
Run Code Online (Sandbox Code Playgroud)

这意味着,在第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
Run Code Online (Sandbox Code Playgroud)

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

最后,更改看起来像这样:

@@ -70,7 +70,7 @@
 foo
 bar
 baz
-red
+blue
 more context
 and more
 still context
Run Code Online (Sandbox Code Playgroud)

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

归功于Markus Bertheau.

  • 简短回答:在您的情况下,14是在应用更改之前的大块行数,12 - 之后. (7认同)
  • "no-of-lines"值可能不会立即显现出来.'before'值是3个引导上下文行的总和,`-`行的数量和3个尾随上下文行,而'after'值是3个引导上下文行的总和,`+的数量`行和3个尾随行.在某些情况下,还有其他中间上下文行也会添加到这些数字中.所以显示的总行数通常都不是"无行数"值! (5认同)
  • 在第一个添加2行的例子中有一个红色的鲱鱼:`@@ -75,6 +77,8 @@`.75和77可能会混淆新手认为与添加2行有关.实际上,一个更简单的例子就是`@@ -75,6 +75,8 @@`.+77只有在其他编辑更高的情况下才会增加2行的净值. (3认同)
  • 因为这是一个很好的答案,所以我想指出一个微妙的错误,如果我可能这么迂腐的话。如果你说,“这意味着,在原始文件中第 78 行之后(= 75 + 3 行上下文)添加两行。”,你应该说“在第 77 行之后”,因为第 75 行本身就是 3 行之一上下文,即第 75、76 和 77 行是上下文。所以实际上是在第 77 行 (=75+2) 之后添加新代码。因此,新文本“line1”将位于第 78 行(如果这 2 个新行是唯一的更改/差异)。我确信您明白了。 (2认同)

Cir*_*四事件 8

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

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

diff -u统一差异的格式基本相同.

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

diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')
Run Code Online (Sandbox Code Playgroud)

输出:

@@ -1,6 +1,4 @@
 1
-2
-3
 4
 5
 6
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16
Run Code Online (Sandbox Code Playgroud)

@@ -1,6 +1,4 @@ 手段:

@@ -11,6 +9,4 @@ 对于第二个大块是类似的:

  • 更清楚了,谢谢。 (4认同)

Jos*_*ban 5

概括:

  • 假设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] @@