diff
命令有三种模式:上下文模式(context),合并模式(unified)和普通模式(normal)。其中最常用的是合并模式。
合并模式
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
-
第一部分表示文件名和时间
--- f1 2024-03-11 21:08:41 +++ f2 2024-03-11 21:08:40
---
表示变动前的文件+++
表示变动后的文件
-
第二部分表示变动的位置
@@ -3,7 +3,7 @@
-3,7
:-
号表示变动前的文件,3,7
表示从第 3 行开始的连续 7 行+3,7
:表示变动后的文件的从第 3 行开始的连续 7 行
-
第三部分表示变动的具体内容,上下文各显示 3 行
-6 +66
- 标志位
-
表示第一个文件删除的行 - 标志位
+
表示第二个文件新增的行
- 标志位
附: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 a/f1 b/f1
diff --git
表示这是 git 版本的 diffa/f1 b/f1
表示进行比较的是 a 版本的 f1(即变动前)和 b 版本的 f1(即变动后)
-
第二部分表示两个文件的哈希值
index 6f8a38c..449b072 100644
index xxx..xxx
表示两个版本的 git 哈希值(index 区域的6f8a38c
对象,与工作目录区域的449b072
对象进行比较)100644
是对象的模式(普通文件,644 权限)
-
后面的部分与 unified 模式相同
上下文模式
上下文各显示 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
-
第一部分表示文件名和时间
*** 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 格式。
原文件
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
(变更)。除了change
外,变动模式还有add
(新增)和delete
(删除)。- 第二个
6
表示变动后变成 f2 的第 6 行。
- 第一个
-
第二行
< 6
和 f1 相关。<
表示要从 f1 当中去除该行,后面的6
表示该行的内容。 -
第三行
---
用来分割 f1 和 f2 的内容。 -
第四行
> 66
和 f2 相关。>
表示 f2 增加了该行,后面的66
表示该行的内容。