返回顶部
本页目录

merge

将两个或更多的开发历史连接在一起

语法

                            
  • git merge [branch]

选项

--commit,--no-commit

执行合并并提交结果。这个选项可以用来覆盖--no-commit

使用–no-commit执行合并,并在创建合并提交前停止,让用户在提交前有机会检查并进一步调整合并结果。

请注意,快进更新并不创建合并提交,因此无法使用 --no-commit 来停止这些合并。因此,如果你想确保你的分支不被合并命令修改或更新,请使用 --no-ff--no-commit

--edit
-e
--no-edit

提交成功的机械合并之前,请调用编辑器以进一步编辑自动生成的合并消息,以便用户可以解释并证明合并的合理性。所述 --no-edit 选项可用于接受自动生成的消息。该 --edit (或 -e )选项仍然是有用的,如果你给同一个消息草稿 -m 命令行选项,并希望在编辑器中编辑它。

较早的脚本可能取决于不允许用户编辑合并日志消息的历史行为。他们将在运行 git merge 时看到一个打开的编辑器。为了更容易地将这些脚本调整为更新的行为,可以在它们的开头将环境变量 GIT_MERGE_AUTOEDIT 设置为 no

--cleanup=<mode>

该选项确定提交前如何清除合并消息。另外,如果为 <mode> 赋予 scissors 值,则在发生合并冲突的情况下,剪刀将被附加到 MERGE_MSG 上,然后传递给提交机制。

--ff
--no-ff
--ff-only

指定当合并的历史记录已经是当前历史记录的后代时,如何处理合并。除非合并未存储在 refs/tags/ 层次结构中其自然位置的带注释(且可能带有符号)的标记,否则默认为 --ff ,在这种情况下,假定为 --no-ff

使用 --ff ,尽可能将合并解析为快进(仅更新分支指针以匹配合并的分支;不创建合并提交)。如果不可能(当合并的历史记录不是当前历史记录的后代时),请创建合并提交。

使用 --no-ff ,即使在合并可以替代为快进的情况下,也可以在所有情况下创建合并提交。

使用 --ff-only ,在可能的情况下将合并解析为快进。如果不可能,请拒绝合并并以非零状态退出。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG对结果合并提交进行签名。所述 keyid 的参数是可选的,并且默认为提交者身份; 如果指定,则必须将其固定在选项中,且不能留空格。 --no-gpg-sign 有助于 commit.gpgSign 配置变量和更早的 --gpg-sign

--log[=<n>]
--no-log

除了分支名称之外,最多还用<n>个正在合并的实际提交中的单行描述填充日志消息

使用--no-log时,不列出实际提交中的单行描述。

--stat
-n
--no-stat

在合并结束时显示一个diffstat。diffstat也由配置选项merge.stat控制。

使用-n或–no-stat在合并结束时不显示diffstat。

--squash
--no-squash

产生工作树和索引状态,就像发生真正的合并一样(合并信息除外),但实际上不进行提交,移动 HEAD 或记录 $GIT_DIR/MERGE_HEAD (以使下一个 git commit 命令创建一个合并提交)。这使您可以在当前分支的顶部创建一个提交,其作用与合并另一个分支的作用相同。

使用 --no-squash 执行合并并提交结果。这个选项可以用来覆盖--squash

使用--squash,--commit是不允许的,而且会失败。

--[no-]verify

默认情况下,会运行 pre-mergecommit-msg 挂钩。当给出 --no-verify 时,这些将被绕过

-s <strategy>
--strategy=<strategy>

使用给定的合并策略;可以多次提供以按照应尝试的顺序指定它们。如果没有 -s 选项,则使用内置的策略列表( ort 合并单个头部时,否则使用 octopus )。

-X <option>
--strategy-option=<option>

将合并策略的特定选项传递给合并策略。

--verify-signatures
--no-verify-signatures

验证被合并的侧分支的提示提交是否用有效的密钥签署,即具有有效uid的密钥:在默认的信任模型中,这意味着签署密钥已经由受信任的密钥签署。如果侧分支的提示提交不是用有效的密钥签署的,合并就会中止。

--summary
--no-summary

--stat--no-stat的同义词;这两个词已经过时,将来会被删除。

-q
--quiet

意味着没有进展。

-v
--verbose

Be verbose.

--progress
--no-progress

明确开启/关闭进度。如果两者都不指定,如果标准误差连接到终端,则显示进度。注意,并非所有的合并策略都支持进度报告。

--autostash
--no-autostash

在操作开始前自动创建一个临时的 stash 条目,将其记录在特殊 ref MERGE_AUTOSTASH 中并在操作结束后应用。这意味着您可以在脏工作树上运行该操作。但是,请谨慎使用:成功合并后的最终存储应用程序可能会导致重大冲突。

--allow-unrelated-histories

默认情况下, git merge 命令拒绝合并不共享共同祖先的历史记录。当合并两个独立开始的项目的历史时,可以使用此选项来覆盖此安全性。因为这是非常罕见的情况,所以默认情况下不存在用于启用此功能的配置变量,因此不会添加。

-m <msg>

设置合并提交时使用的提交信息(如果创建了合并提交)。

如果指定了 --log ,则将合并的提交的简短日志附加到指定的消息中。

git fmt-merge-msg 命令可以用来提供一个良好的默认自动 git merge 调用。自动消息可以包括分支描述。

--into-name <branch>

准备默认合并消息,就像合并到分支 <branch> 一样,而不是合并到的实际分支的名称。

-F <file>
--file=<file>

读取合并提交时要用到的提交信息(如果创建了合并提交)。

如果指定了 --log ,则将合并的提交的简短日志附加到指定的消息中。

--rerere-autoupdate
--no-rerere-autoupdate

在 rerere 机制重用当前冲突记录的解决方案来更新工作树中的文件后,允许它也使用解决结果更新索引。 --no-rerere-autoupdate 是在使用单独的 git add 将结果提交到索引之前仔细检查 rerere 所做的事情并捕捉潜在错误合并的好方法。

--overwrite-ignore
--no-overwrite-ignore

从合并结果中静默覆盖被忽略的文件。这是默认行为。使用 --no-overwrite-ignore 中止。

--abort

中止当前的冲突解决过程,并尝试重建合并前的状态。如果存在自动缓存条目,将其应用于工作树。

如果合并开始时存在未提交的工作树更改,则 git merge --abort 在某些情况下将无法重构这些更改。因此,建议始终在运行 git merge 之前提交或存储更改。

git merge --abort 除非存在 MERGE_HEAD ,否则git merge --abort等效于 git reset --merge ,除非也存在 MERGE_AUTOSTASH ,在这种情况下 git merge --abort git reset --merge 将隐藏项应用到工作树,而git reset --merge将保存的更改保存藏匿清单。

--quit

忘记当前正在进行的合并。保持索引和工作树不变。如果存在 MERGE_AUTOSTASH ,则存储条目将保存到存储列表中。

--continue

由于冲突而停止 git merge 后,您可以通过运行 git merge --continue 结束合并。

<commit>…​

提交,通常是其他分支的头,要合并到我们的分支。指定一个以上的提交,将创建一个有两个以上父分支的合并

如果没有从命令行给出提交,则合并当前分支被配置为其上游的远程跟踪分支。也请参见本手册页面的配置部分。

FETCH_HEAD (并且没有其他提交)时,通过先前调用 git fetch 进行合并而记录在 .git/FETCH_HEAD 文件中的分支将合并到当前分支。