我一直在从
返回的信息中收集数据git diff <commitId>..<commitId>
我遇到了@@ -1 +1 @@
我无法弄清楚那是什么告诉我的。我在Google上搜索了一下,但无济于事。
答案 0 :(得分:63)
这是一个统一的差异标识符。这是GNU Diffutils的documented。
统一输出格式以两行标题开头,如下所示:
--- from-file from-file-modification-time +++ to-file to-file-modification-time时间戳看起来像
2002-02-21 23:30:39.942229878 -0800
,表示日期,小数秒的时间和时区。在不支持小数时间戳的主机上省略小数秒。您可以使用
--label=label
选项更改标题的内容;请参阅Alternate Names。接下来会出现一个或多个差异;每个块显示文件不同的一个区域。统一格式的帅哥看起来像这样:
@@ from-file-line-numbers to-file-line-numbers @@ line-from-either-file line-from-either-file...如果hunk只包含一行,则只显示其起始行号。否则,其行号看起来像
start,count
。一个空的大块被认为是从大块后面的一行开始的。如果一个hunk及其上下文包含两行或更多行,则其行号看起来像
start,count
。否则只显示其结束行号。一个空的大块被认为是在大块之前的那一行结束。两个文件共有的行以空格字符开头。两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:
- 的 + 强>
这里添加了一行到第一个文件。- <强> - 强>
这里从第一个文件中删除了一行。
答案 1 :(得分:51)
简单的示例分析
格式与diff -u
统一差异基本相同。
例如:
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行:
01
02
03
04
05
06
-
表示“旧”,因为我们通常将其称为diff -u old new
。
+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。
Hunk标题
根据您的git版本和配置,您还可以获得@@
行旁边的代码行,例如func1() {
in:
@@ -4,7 +4,6 @@ func1() {
这也可以通过普通-p
的{{1}}标志获得。
示例:旧文件:
diff
如果我们删除行func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
,则差异显示:
6
请注意,这不是@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
的正确行:它跳过了行func1
和1
。
这个很棒的功能通常可以准确地告诉每个hunk属于哪个函数或类,这对于解释差异非常有用。
如何精确选择标题的算法在Where does the excerpt in the git diff hunk header come from?
中讨论答案 2 :(得分:6)
这是当前的大块范围信息,说明此差异块开始和结束的行号。