Git
简体中文 ▾ Topics ▾ Latest version ▾ git-merge-file last updated in 2.44.0

名称

git-merge-file - 运行三方文件合并

概述

git merge-file [-L <当前名称> [-L <基本名称> [-L <另一个名称>]]]
	[--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
	[--[no-]diff3] [--object-id] <当前文件> <基础文件> <另一个文件>

描述

给定 <当前文件>、<基础文件> 和 <其他文件> 这三个文件,git merge-file 会将从 <基础文件><另一个文件> 的所有改动合并到 <当前文件> 中。合并后的结果通常会放入 <当前文件>git merge-file 可用于合并对原文件的不同改动。假设 <基础文件>`是原文件,而 `<当前文件><另一个文件> 都是对 <基础文件> 的修改,那么 git merge-file 会合并这两处修改。

如果 <当前文件><另一个文件> 在共同的行段中都有改动,就会发生冲突。如果发现冲突,"git merge-file" 通常会输出警告,并用包含 <<<<<<< 和 >>>>>>> 标记的行括弧括住冲突。典型的冲突如下:

<<<<<<< A
文件 A 中的某几行
=======
文件 B 中的某几行
>>>>>>> B

如果存在冲突,用户应编辑结果并删除其中一个备选行。 但是,如果使用了 --ours--theirs--union`选项,这些冲突就会分别以 `<当前文件><其他文件> 或两者的行为优先。 冲突标记的长度可以用 --marker-size 选项给出。

如果指定了 --object-id,则会发生完全相同的行为,只不过不是指定要合并为文件的内容,而是指定为指向 blob 的对象 ID 列表。

如果程序出错,则退出值为负数,否则退出值为冲突数(如果冲突数超过 127,则截断为 127)。如果合并无误,则退出值为 0。

git merge-file 被设计为 RCS merge 的最小克隆;也就是说,它实现了 RCS merge 的所有功能,而这正是 git[1] 所需要的。

选项

--object-id

指定要合并的内容为当前仓库中的 blob,而不是文件。在这种情况下,操作必须在有效的仓库中进行。

如果指定了 -p 选项,合并后的文件(包括冲突(如果有的话))会像往常一样写入标准输出;否则,合并后的文件会写入对象存储空间,其 blob 的对象 ID 会写入标准输出。

-L <标签>

这个选项最多可以给出三次,它指定了在冲突报告中用来代替相应文件名的标签。也就是说,git merge-file -L x -L y -L z a b c 产生的输出看起来像是来自文件 x、y 和 z,而不是文件 a、b 和 c。

-p

将结果发送到标准输出,而不是覆盖 <当前文件>

-q

安静;不警告冲突。

--diff3

以 "diff3" 样式显示冲突。

--zdiff3

以 "zdiff3" 样式显示冲突。

--ours
--theirs
--union

与其在文件中留下冲突,不如解决冲突,使冲突有利于我们(或他们或双方)。

--diff-algorithm={patience|minimal|histogram|myers}

合并时使用不同的差异算法。目前的默认值是 "myers",但选择更新颖的算法(如 "histogram")有助于避免因不重要的匹配行(如不同函数的大括号)而导致的错误合并。另请参阅 git-diff[1] --diff-algorithm

实例

git merge-file README.my README README.upstream

合并 README.my 和 README.upstream 自 README 以来的改动,尝试合并它们,并将结果写入 README.my。

git merge-file -L a -L b -L c tmp/a123 tmp/b234 tmp/c345

将 tmp/a123 和 tmp/c345 与基础 tmp/b234 合并,但使用标签 ac 代替 tmp/a123tmp/c345

git merge-file -p --object-id abc1234 def567 890abcd

合并自 def567 以来 blob abc1234 和 890abcd 的变化,尝试合并它们,并将结果写入标准输出

GIT

属于 git[1] 文档

scroll-to-top