Git Diff标题上的数字是什么意思?
每次我运行git diff时,对于我所做的每一个更改,我都会得到一些带有数字的标题,例如:
@@ -169,14 +167,12 @@ function Browser(window, document, body, XHR, $log) {.....
我想知道这四个数字是什么意思? 我想-169意味着这个特定的代码行最初是在169行,但现在在167? 14和12是什么意思?
这个头被称为改变的集合,或大块。 每个块都以一行包含在@@中的行开始,该行或行范围是文件之前(带有-
)和之后(带有+
)的更改时的非行。 之后来自文件的行。 以-
开头的行被删除,以+
开始的行被添加。 每个由修补程序修改的行被前后三行上下文环绕。
另外看起来像这样:
@@ -75,6 +103,8 @@ foo bar baz +line1 +line2 more context and more and still context
这意味着,在第78行之后的原始文件(= 75 + 3行的上下文)中添加两行。 这些将是第106行(= 103 + 3行的上下文)到107之后全部改变。
注意数字的区别(-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行的上下文)。
信贷去Markus Bertheau 。
我想知道这四个数字是什么意思?
我们来分析一个简单的例子
格式与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 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。
概要:
- 假设
git diff
会输出[0-3]上下文行[before / after] [first / last]变化
@@ – [ original file's number of first line displayed
],[ context lines + removed lines
] + [ changed file's number of first line displayed
],[ context lines + added lines
] @@