Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.44.1 → 2.47.0 no changes
- 2.44.0 02/23/24
- 2.43.1 → 2.43.5 no changes
- 2.43.0 11/20/23
- 2.35.1 → 2.42.3 no changes
- 2.35.0 01/24/22
- 2.7.6 → 2.34.8 no changes
- 2.6.7 05/05/17
- 2.1.4 → 2.5.6 no changes
- 2.0.5 12/17/14
概述
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 合并,但使用标签
a
和c
代替tmp/a123
和tmp/c345
。 -
git merge-file -p --object-id abc1234 def567 890abcd
-
合并自 def567 以来 blob abc1234 和 890abcd 的变化,尝试合并它们,并将结果写入标准输出
GIT
属于 git[1] 文档