设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.44.1 → 2.50.1 无更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 无更改
-
2.43.0
2023-11-20
- 2.35.1 → 2.42.4 无更改
-
2.35.0
2022-01-24
- 2.7.6 → 2.34.8 无变更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 无更改
-
2.0.5
2014-12-17
概要
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,则截断为 127)。如果合并干净,退出值为 0。
git merge-file旨在成为 RCS merge的最小克隆;也就是说,它实现了git[1]所需的所有 RCS merge功能。
选项
- --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
-
将结果发送到标准输出,而不是覆盖<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.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,但使用标签
a
和c
代替tmp/a123
和tmp/c345
。 git
merge-file
-p
--object-id
abc1234
def567
890abcd
-
将 blob abc1234 和 890abcd 自 def567 以来的变更合并,并尝试合并它们,然后将结果写入标准输出。