我一直在从以下来源返回的信息中收集数据
git diff <commitId>..<commitId>
我遇到了 @@ -1 +1 @@
我不知道那是什么告诉我。我在Google上搜索了一下,但无济于事。
我一直在从以下来源返回的信息中收集数据
git diff <commitId>..<commitId>
我遇到了 @@ -1 +1 @@
我不知道那是什么告诉我。我在Google上搜索了一下,但无济于事。
Answers:
这是统一的diff块标识符。这是记录由GNU diffutils的。
统一输出格式以两行标题开头,如下所示:
--- from-file-from-file-modification-time +++ to-file-to-file-modification-time时间戳看起来像是
2002-02-21 23:30:39.942229878 -0800
指示日期,带小数秒的时间和时区。在不支持小数时间戳记的主机上,小数秒被忽略。您可以使用
--label=label
选项更改标题的内容。请参阅参见备用名称。接下来是一个或多个差异。每个块显示一个文件不同的区域。统一格式的块看起来像这样:
@@ from-file-line-numbers到file-line-numbers @@ line- from- 两个文件line-from-两个文件 ...如果块仅包含一行,则仅显示其起始行号。否则,其行号看起来像。空的块被视为从块后面的行开始。
start,count
如果大块及其上下文包含两行或更多行,则其行号看起来像。否则,仅显示其结束行号。空的块体被认为在块体之前的行结束。
start,count
这两个文件共有的行以空格字符开头。这两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:
- +
在第一个文件中添加了一行。- -
从第一个文件中删除了一行。
简单实例分析
格式基本相同 diff -u
统一的diff。
例如:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
在这里,我们删除了第2、3、14和15行。输出:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
@@ -1,6 +1,4 @@
手段:
-1,6
表示第一个文件的这一部分从第1行开始,总共显示6行。因此,它显示第1至6行。
1
2
3
4
5
6
-
表示“旧”,因为我们通常将其称为diff -u old new
。
+1,4
表示第二个文件的这一部分从第1行开始,总共显示4行。因此,它显示第1至4行。
+
表示“新”。
我们只有4行而不是6行,因为删除了2行!新的大块头就是:
01
04
05
06
@@ -11,6 +9,4 @@
第二个大块是类似的:
在旧文件上,我们有6行,从旧文件的第11行开始:
11
12
13
14
15
16
在新文件上,我们有4行,从新文件的第9行开始:
11
12
13
16
请注意,该行11
是新文件的第9行,因为我们已经删除了前一个大块的2行:2和3。
大块头
根据您的git版本和配置,您还可以在该行旁边获得一个代码@@
行,例如func1() {
in:
@@ -4,7 +4,6 @@ func1() {
也可以使用-p
plain标志获得diff
。
示例:旧文件:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
如果我们删除line 6
,则差异显示:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
请注意,这不是正确的行func1
:它跳过了行1
和2
。
这个很棒的功能通常会准确告诉每个块属于哪个函数或类,这对于解释差异非常有用。
有关选择标头的算法的确切工作方式,请参见:git diff hunk标头中的摘录来自何处?
@@ -1,6 +1,4 @@
为“从第1行开始,旧行数为6,而新行数为4”
这是当前的块范围信息,说明此diff块在哪个行号上开始和结束。
阅读http://en.wikipedia.org/wiki/Diff#Unified_format以获得更深入的解释。