如何阅读 diff 命令的输出

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
  1. 第一部分表示文件名和时间

    --- f1	2024-03-11 21:08:41
    +++ f2	2024-03-11 21:08:40
    
    • --- 表示变动前的文件
    • +++ 表示变动后的文件
  2. 第二部分表示变动的位置

    @@ -3,7 +3,7 @@
    
    • -3,7- 号表示变动前的文件,3,7 表示从第 3 行开始的连续 7 行
    • +3,7:表示变动后的文件的从第 3 行开始的连续 7 行
  3. 第三部分表示变动的具体内容,上下文各显示 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
  1. 第一部分表示比较的文件

    diff --git a/f1 b/f1
    
    • diff --git 表示这是 git 版本的 diff
    • a/f1 b/f1 表示进行比较的是 a 版本的 f1(即变动前)和 b 版本的 f1(即变动后)
  2. 第二部分表示两个文件的哈希值

    index 6f8a38c..449b072 100644
    
    • index xxx..xxx表示两个版本的 git 哈希值(index 区域的 6f8a38c 对象,与工作目录区域的 449b072 对象进行比较)
    • 100644 是对象的模式(普通文件,644 权限)
  3. 后面的部分与 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
  1. 第一部分表示文件名和时间

    *** f1	Mon Mar 11 21:05:01 2024
    --- f2	Mon Mar 11 21:04:56 2024
    
    • *** 表示变动前的文件
    • --- 表示变动后的文件
  2. 第三行的星号 *************** 是分隔符

  3. 第二部分表示具体的变动

    *** 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
  1. 第一部分 6c6:表示变动的位置。

    • 第一个 6 表示文件 f1 的第 6 行有变化。
    • c 表示变动模式是 change(变更)。除了 change 外,变动模式还有 add(新增)和 delete(删除)。
    • 第二个 6 表示变动后变成 f2 的第 6 行。
  2. 第二行 < 6 和 f1 相关。< 表示要从 f1 当中去除该行,后面的 6 表示该行的内容。

  3. 第三行 --- 用来分割 f1 和 f2 的内容。

  4. 第四行 > 66 和 f2 相关。> 表示 f2 增加了该行,后面的 66 表示该行的内容。

参考:读懂 diff | 阮一峰的网络日志

posted @ 2024-06-04 14:32  Undefined443  阅读(4)  评论(0编辑  收藏  举报