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-merge
和commit-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
文件中的分支将合并到当前分支。