我一直在从返回的信息中收集数据
git diff <commitId>..<commitId>
我遇到了@@ -1 +1 @@
我不知道那在告诉我什么。我在谷歌上搜索了一下,但无济于事。
简单的例子分析
格式与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 行。因此它显示了第 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() {
:
@@ -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 标头中的摘录来自哪里?
这是一个统一的差异大块标识符。这由 GNU Diffutils记录。
统一的输出格式以两行标题开头,如下所示:
---从文件从文件修改时间 +++到文件到文件修改时间时间戳看起来像是
2002-02-21 23:30:39.942229878 -0800
用小数秒表示日期、时间和时区。在不支持小数时间戳的主机上省略小数秒。您可以使用选项更改标题的内容
--label=label
;请参阅替代名称。接下来是一大堆差异;每个大块显示文件不同的一个区域。统一格式大块看起来像这样:
@@ from-file-line-numbers to-file-line-numbers @@ line-from-either-file line-from-either-file ...如果一个大块只包含一行,则只显示其起始行号。否则它的行号看起来像. 一个空的大块被认为是从大块后面的行开始的。
start,count
如果一个大块及其上下文包含两行或多行,它的行号看起来像. 否则只显示其结束行号。空大块被认为在大块之前的行处结束。
start,count
两个文件共有的行都以空格字符开头。两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:
- +
在第一个文件中添加了一行。- -
从第一个文件中删除了一行。
这是当前大块范围信息,说明此差异大块开始和结束的行号。