
1. 命令简介diff3 命令用于比较三个文件之间的差异并将差异内容输出到标准输出。它常用于合并两个不同版本对同一原始文件的修改并识别出冲突的部分。diff3 是版本控制和文件合并场景下的重要工具能够清晰地展示三个文件在行级别上的不同之处。2. 语法格式bash运行diff3 [选项]... 文件1 文件2 文件3格式说明文件 1通常被视为原始文件或基础版本。文件 2第一个修改版本。文件 3第二个修改版本。命令会比较这三个文件并以特定格式输出差异信息。3. 常用选项及说明表格选项说明-a将所有输入文件视为文本文件进行逐行比较即使它们可能不是文本文件。-A合并模式。将文件 2 和文件 3 相对于文件 1 的差异合并到文件 1 的上下文中输出。冲突内容会用 、和 标记括起。这是最常用的合并查看格式。-B与 -A 类似但不输出冲突标记。仅显示无冲突的合并结果冲突部分被静默处理。-e / --ed生成一个适用于 ed 编辑器的脚本。该脚本可以将文件 2 和文件 3 的变更合并到文件 1 上。如果存在冲突脚本中不会包含冲突部分。--easy-only与 -e 类似但完全忽略所有重叠的变更即文件 2 和文件 3 修改了同一区域只生成无冲突部分的 ed 脚本。-3 / -E / -X这些是简化合并输出的选项分别对应不同的冲突处理模式-3仅标记出所有三个文件都不同的冲突。-E类似 -A但冲突标记更简洁。-X与 -E 相同为兼容性保留。-m / --merge执行合并操作并将结果输出到标准输出。这是执行实际合并操作的选项行为类似 -A但可直接用于生成合并后的文件。-i为兼容 System V在由 -e 生成的 ed 脚本末尾添加 w写入和 q退出命令。必须与 -AeExX3 之一联用且不能与 -m 联用。--initial-tab在正常输出的行前使用一个制表符TAB代替两个空格进行缩进。这有助于在行内存在 TAB 字符时保持对齐美观。-x / --overlap-only仅显示所有三个文件互不相同的内容即重叠冲突部分。-L / --label为输出中的文件指定自定义标签代替默认的文件名。例如diff3 -L ORIG -L MINE -L YOURS file1 file2 file3。4. 示例用法示例 1: 基本比较比较三个文件并显示差异bash运行diff3 file_original.txt file_v1.txt file_v2.txt输出会显示三个文件在哪些行有所不同。示例 2: 合并并标记冲突常用使用 -A 或 -m 选项查看合并结果冲突会被清晰标记bash运行diff3 -m file_original.txt file_v1.txt file_v2.txt merged_output.txt或bash运行diff3 -A file_original.txt file_v1.txt file_v2.txt在输出中你会看到类似这样的冲突标记plaintext file_v1.txt 这是文件v1的内容 ||||||| file_original.txt 这是原始文件的内容 这是文件v2的内容 file_v2.txt示例 3: 生成合并脚本生成一个 ed 脚本用于将 file_v1.txt 和 file_v2.txt 的修改合并到 file_original.txtbash运行diff3 -e file_original.txt file_v1.txt file_v2.txt merge_script.ed之后可以使用 ed file_original.txt merge_script.ed 来应用合并需注意处理冲突。示例 4: 仅显示冲突部分如果只关心三个文件版本不一致的地方bash运行diff3 -x file_original.txt file_v1.txt file_v2.txt示例 5: 使用自定义标签为输出中的每个文件版本使用更有意义的标签bash运行diff3 -A -L BASE -L SERVER -L LOCAL original.c server.c local.c5. 注意事项文件顺序很重要通常将原始或基础文件作为第一个参数文件 1两个衍生版本作为文件 2 和文件 3。这会影响合并输出的逻辑和冲突标记的解读。冲突处理-A、-m 选项输出的冲突标记需要人工审阅和解决。自动合并如使用 -e 生成的脚本会跳过冲突部分。输出格式默认的输出格式可能不易读建议使用 -A、-m 或 --label 等选项来获取更清晰的合并视图。脚本生成-e 选项生成的 ed 脚本不包含冲突解决方案。如果存在冲突脚本可能无法直接成功应用。二进制文件尽管 -a 选项可以强制将文件作为文本比较但对于真正的二进制文件比较结果通常无意义且可能产生大量乱码输出。版本控制集成许多版本控制系统如 Git在内部使用 diff3 算法或其变种进行三路合并。在配置合并工具时diff3 风格是一个常见选项。