最原始的 diff
我们先编写两个文件:
f1:
1
2
3
4
5
6
7
8
9
f2:
1
2
3
4
5
66
7
8
9
然后我们进行比较:
diff f1 f2
:
6c6
< 6
---
> 66
-
第一部分:表示变动位置。
6c6
的第一个6
表示文件 f1 的第 6 行有变化。c
表示变动模式是change
(变更)。后面的6
表示变动后变成f2
的第 6 行。除了change
外,变动模式还有add
(新增)和delete
(删除)。 -
< 6
:小于号表示要从 f1 当中去除该行,后面的6
表示该行的内容。 -
---
:用来分割 f1 和 f2 的内容 -
> 66
:大于号表示 f2 增加了该行,后面的66
表示该行的内容。
显示上下文模式的 diff
上下文各显示 3 行
diff -c f1 f2
:
*** f1 Mon Mar 11 21:05:01 2024
--- f2 Mon Mar 11 21:04:56 2024
***************
*** 3,9 ****
3
4
5
! 6
7
8
9
--- 3,9 ----
3
4
5
! 66
7
8
9
- 第一部分:文件名和时间。
***
表示变动前的文件,---
表示变动后的文件。 - 第一部分下的星号是分隔符
- 分隔符下的第二部分第一段:
***
表示变动前的文件3,9
表示下面的内容是该文件的第 3 到 9 行- 每行前面的标记位,
+
表示该行为新增,!
表示该行有改动,-
表示该行被删除
- 分隔符下的第二部分第二段:
---
表示变动后的文件
合并模式的 diff
diff -u f1 f2
:
--- f1 2024-03-11 21:08:41
+++ f2 2024-03-11 21:08:40
@@ -3,7 +3,7 @@
3
4
5
-6
+66
7
8
9
- 第一部分:文件名和时间。
---
表示变动前的文件,+++
表示变动后的文件。 - 第二部分表示变动的位置:
-3,7
:-
号表示变动前的文件,3,7
表示从第 3 行开始的连续 7 行+3,7
:表示变动后的文件的从第 3 行开始的连续 7 行
- 第三部分:变动的具体内容,上下文各显示 3 行。标志位
-
表示第一个文件删除的行,+
表示第二个文件新增的行。
附:git 版本的 diff
git diff
:
diff --git a/f1 b/f1
index 6f8a38c..449b072 100644
--- a/f1
+++ b/f1
@@ -3,7 +3,7 @@
3
4
5
-6
+66
7
8
9
- 第一部分:
diff --git
表示这是 git 版本的 diff。a/f1 b/f1
表示进行比较的是 a 版本的 f1(即变动前)和 b 版本的 f1(即变动后)。 - 第二部分:表示两个版本的 git 哈希值(index 区域的
6f8a38c
对象,与工作目录区域的449b072
对象进行比较),100644
是对象的模式(普通文件,644 权限)。 - 后面的部分与 unified 模式相同