2011-06-28 95 views
37

我每次运行git的差异,因为我做每一个变化,我得到某种头顶球的数字,例如:Git Diff标题上的数字是什么意思?

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

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

回答

38

标头被称为一组变化,或大块。每个块都以一行包含在@@中的行开头,该行包含文件之前(有-)和之后(有+)的文件中的行或行范围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

+7

简短的回答:你的情况,14量在应用这些变化之前,在大块的线路上,12 - 之后。 –

+5

“无线”值可能不会立即显而易见。 'before'值是3个前导上下文行的总和,'-'行数和3个尾随上下文行的总和,而'after'值是3个前导上下文行的总和,'+ '线和3条尾线。在某些情况下,还有额外的中间上下文行也被添加到这些数字中。所以显示的总行数通常不是“无行”值! –

+3

在第一个添加2行的示例中有一条红色鲱鱼:'@@ -75,6 +77,8 @@'。 75和77可能会混淆新手,认为这与添加2行有关。其实,一个简单的例子就是'@@ -75,6 +75,8 @@'。 +77只会在其他编辑更高的情况下增加2行。 – wisbucky

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],[​​] @@

4

我不知道是什么的四个数字是什么意思?

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

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

我们先从号码从1到16和除去2,3,14和15:

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 
    

    -的意思是“老”,因为我们通常将其称为diff -u old new

  • +1,4说这件作品对应于第二个文件的第1行到第4行。

    +表示“新”。

    我们只有4行而不是6,因为2行被删除!新的大块就是:

    1 
    4 
    5 
    6 
    

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

  • 上的旧文件,我们有6条线路,起始于旧文件的第11行:

    11 
    12 
    13 
    14 
    15 
    16 
    
  • 在新文件中,我们有4条线,开始在新的文件的第9行:

    11 
    12 
    13 
    16 
    

    注意该行11是新文件的第9行,因为我们已经删除2行上一大块:2和3