我一直在收集从信息返回的数据
git diff <commitId>..<commitId>
我遇到了 @@ -1 +1 @@
我没能理解那是什么意思。我在谷歌上搜索了一些内容,但没有结果。
我一直在收集从信息返回的数据
git diff <commitId>..<commitId>
我遇到了 @@ -1 +1 @@
我没能理解那是什么意思。我在谷歌上搜索了一些内容,但没有结果。
简单示例分析
格式基本上与 diff -u
统一的差异一致。
例如考虑以下情况:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
其中:
01
,02
到16
02
,03
,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
请注意,因为我们已经在之前的块中删除了2行(2和3),所以第11行是新文件的第9行。
代码块头
根据您的 Git 版本和配置,您还可以在 @@
行旁边得到一行代码,例如以下示例中的 func1() {
:
@@ -4,7 +4,6 @@ func1() {
这也可以通过纯文本 diff
的 -p
标志获得。
例如:旧文件:
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
和2
行。
这个很棒的功能经常告诉我们每个代码块属于哪个函数或类,这对于解释差异非常有用。
如何选择头文件的算法确切地讨论在这里:Git差异块头摘录来自哪里?
一行简略表示法
这种情况非常少见,但请考虑:
diff -U0 <(seq -w 16) <(seq -w 16 | sed 's/10/hack/')
其中:
-U0
:使用 0 行上下文10
替换为 hack
在这种情况下,差异输出如下:
@@ -10 +10 @@
-10
+hack
我们知道,当出现单行更改时,标记会被总结为只显示一个数字而不是 m,n
对。
这种行为在Todd's answer引用的文档中有所记录:
如果一个块只包含一行,则只显示其起始行号。否则,它的行号看起来像是起始行号、计数。空白的块被认为从后续块之后的行开始。
单行块添加和删除的样子如下,删除:
diff -U0 <(seq -w 16) <(seq -w 16 | grep -Ev '^(10)$')
输出:
@@ -10 +9,0 @@
-10
添加:
$ diff -U0 <(seq -w 16 | grep -Ev '^(10)$') <(seq -w 16)
输出:
@@ -9,0 +10 @@
+10
已在diff 3.8和Ubuntu 22.10上进行测试。
@@ -1,6 +1,4 @@
读作:“从第1行开始,旧的行数为6,但新的行数为4”。 - Cloud--- 源文件 源文件修改时间 +++ 目标文件 目标文件修改时间时间戳看起来像
2002-02-21 23:30:39.942229878 -0800
,用于表示日期、带分数秒的时间和时区。不支持分数时间戳的主机将省略分数秒。--label=label
选项更改标题内容,可以参考替代名称。@@ 源文件行号 目标文件行号 @@ 来自任意文件的行 来自任意文件的行...如果一个差异块只包含一行,则仅显示其起始行号。否则,它的行号看起来像
起始,数量
。一个空白块被认为从块后面的行开始。起始,数量
。否则,仅显示其结束行号。一个空白块被认为在块之前的行结束。这是当前的差异范围信息,指出了此差异块开始和结束的行号。