English ▾ 主题 ▾ 最新版本 ▾ git-merge-file 上次更新于 2.44.0

名称

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

概要

git merge-file [-L <current-name> [-L <base-name> [-L <other-name>]]]
	[--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
	[--[no-]diff3] [--object-id] <current> <base> <other>

描述

给定三个文件 <current><base><other>git merge-file 将从 <base><other> 的所有更改合并到 <current> 中。结果通常会写入到 <current> 中。git merge-file 对于合并对原始文件的单独更改非常有用。假设 <base> 是原始文件,而 <current><other> 都是对 <base> 的修改,那么 git merge-file 会合并这两个更改。

如果 <current><other> 在一个公共的行段落中都有更改,则会发生冲突。如果发现冲突,git merge-file 通常会输出警告,并使用包含 <<<<<<< 和 >>>>>>> 标记的行将冲突括起来。一个典型的冲突看起来像这样

<<<<<<< A
lines in file A
=======
lines in file B
>>>>>>> B

如果存在冲突,用户应该编辑结果并删除其中一个替代方案。但是,当 --ours--theirs--union 选项生效时,这些冲突会被解决,分别倾向于来自 <current> 的行、来自 <other> 的行或来自两者的行。可以使用 --marker-size 选项指定冲突标记的长度。

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

该程序的退出值在出错时为负数,否则为冲突的数量(如果冲突数量超过该数量,则截断为 127)。如果合并是干净的,则退出值为 0。

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

选项

--object-id

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

如果指定了 -p 选项,则合并后的文件(包括任何冲突)会像正常一样发送到标准输出;否则,合并后的文件会被写入到对象存储中,并且其 blob 的对象 ID 会被写入到标准输出。

-L <label>

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

-p

将结果发送到标准输出,而不是覆盖 <current>

-q

安静模式;不要警告冲突。

--diff3

以 "diff3" 样式显示冲突。

--zdiff3

以 "zdiff3" 样式显示冲突。

--ours
--theirs
--union

不将冲突留在文件中,而是解决冲突,倾向于我们(或他们,或两者)一侧的行。

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

合并时使用不同的 diff 算法。当前默认值为 "myers",但选择更新的算法(例如 "histogram")可以帮助避免由于不重要的匹配行(例如来自不同函数的括号)而导致的错误合并。另请参阅 git-diff[1] --diff-algorithm

示例

git merge-file README.my README README.upstream

合并自 README 以来 README.my 和 README.upstream 的更改,尝试合并它们,并将结果写入到 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