Linux系统之diff3命令详解
diff3
是 Linux/Unix 系统中用于 逐行比较三个文件 的工具。它常用于版本控制(如合并代码分支),通过比较当前文件、共同祖先文件和另一个用户的文件,帮助识别差异和冲突。
基本语法
diff3 [选项]... 我的文件 旧文件 你的文件
常用选项详解
输出格式控制
选项 | 长选项 | 说明 |
---|---|---|
-A | --show-all | 显示所有变更,并用特殊标记标识冲突 |
-e | --ed | 生成 ed 脚本,将你的文件的修改应用到我的文件 |
-E | --show-overlap | 类似 -e ,但会标记冲突 |
-3 | --easy-only | 类似 -e ,但只合并无冲突的修改 |
-x | --overlap-only | 类似 -e ,但只合并有冲突的修改 |
-X | 类似 -x ,但会标记冲突 | |
-m | --merge | 直接输出合并后的文件 |
其他选项
选项 | 说明 |
---|---|
-a | 将所有文件视为文本文件 |
-i | 在 ed 脚本末尾添加 w 和 q 命令 |
-T | 在行首添加制表符以对齐 |
-L LABEL | 用指定标签代替文件名(最多三次) |
--diff-program=PROGRAM | 使用指定的比较程序 |
示例
1. 基本比较
diff3 file1.txt file2.txt file3.txt
- 显示三个文件的差异,冲突部分会用
====
标记
2. 生成合并脚本
diff3 -e myfile.txt oldfile.txt yourfile.txt > merge.ed
- 生成 ed 脚本,可将 yourfile.txt 的修改应用到 myfile.txt
3. 直接合并文件
diff3 -m myfile.txt oldfile.txt yourfile.txt > merged.txt
- 自动合并三个文件,输出到 merged.txt
4. 标记所有冲突
diff3 -A myfile.txt oldfile.txt yourfile.txt
- 显示所有变更,明确标记冲突部分
5. 使用自定义标签
diff3 -L "我的版本" -L "基础版本" -L "你的版本" file1 file2 file3
- 用自定义标签代替文件名输出
退出状态
- 0:合并成功,无冲突
- 1:合并成功,但有冲突
- 2:发生错误
注意事项
- 输入文件为
-
时表示从标准输入读取 -m
选项比使用 ed 脚本更健壮,推荐用于复杂合并- 合并冲突时,输出会包含
<<<<<<<
、=======
和>>>>>>>
标记
合并冲突标记说明
<<<<<<< 我的文件
我的文件内容
=======
你的文件内容
>>>>>>> 你的文件
这个标记表示两个版本在此处有冲突,需要手动解决。