如何在提交消息中添加"Merge branch 'name_of_branch' into 'name_of_branch'"?



直到今天,我 git 一直在添加我提交消息Merge branch 'name_of_branch' into 'name_of_branch'。它还添加了一个超级酷的冲突列表。但是现在,当我合并具有冲突的分支时,消息不再存在。

如何重新启用它?

我想做更多与这里问的相反的事情 如何避免"合并提交消息中的分支'name_of_branch'?

任何git merge都会为最终提交设置默认日志消息。 "默认默认值",即,如果您不使用自己的默认值或显式内容覆盖内置默认值,则得到什么,包括1个分支名称,除非合并到master中时它只包含一个非master分支名称。

但是,实际消息本身取决于几个项目(我已经提到过其中一项):

  • 您是自己跑git merge,还是让git pull为您运行?
  • 您是否使用了--squash选项?
  • 是否使用远程跟踪分支名称进行合并?
  • 当前分支是否名为master
  • 您是否使用了--log选项,或者将merge.log配置为整数值或true
  • 您是否在配置中设置了merge.branchdesc

另请参阅git fmt-merge-msg文档以及git merge文档。

如果您以交互方式编辑合并消息(这是默认设置),则有机会根据自己的喜好对其进行修改。 您的prepare-commit-msgcommit-msg钩子也有机会修改消息;请参阅 Githooks 文档。git interpret-trailers命令在提交消息挂钩中也可能很有用(请参阅文档中的示例)。


1"All",表示章鱼合并;但大多数合并只涉及两个分支名称。 当然,当使用原始提交哈希时,没有可用的分支名称。

> 使用 Git 2.35(2022 年第 1 季度)应该更容易:由"git merge">(man)准备的默认合并消息记录当前分支的名称; 现在可以使用新选项覆盖该名称,以允许用户假装在不同的分支上进行合并。

参见提交 bd2bc94 (2021 年 12 月 20 日) 由 Junio C Hamano (gitster).
(由 Junio C Hamano 合并 --gitster-- 在提交 bb14cfd 中,2022 年 1 月 5 日)

merge:允许假装合并到不同的分支中

topic-B的一系列补丁依赖于具有topic-A时,准备topic-B分支的工作流程将如下所示:

$ git checkout -b topic-B main
$ git merge --no-ff --no-edit topic-A
$ git am <mbox-for-topic-B

topic-A更新时,重新创建第一次合并并重新定位topic-B的其余部分,全部在分离的 HEAD 上,是一种有用的技术.
用新一轮补丁更新topic-A后:

(0) $ git checkout topic-B
(1) $ prev=$(git rev-parse 'HEAD^{/^Merge branch .topic-A. into}')
(2) $ git checkout --detach $prev^1
(3) $ git merge --no-ff --no-edit topic-A
(4) $ git rebase --onto HEAD $prev @{-1}^0
(5) $ git checkout -B @{-1}

这将:

  • (0) 查看当前topic-B
  • (1)找到之前将topic-A合并为topic-B
  • (2) 将 HEAD 分离到上一个合并的父级。
  • (3) 将更新的topic-A合并到其中。
  • (4) 重新应用补丁以重建topic-B的其余部分。
  • (5) 使用结果更新topic-B

而不会过多地污染topic-B的 reflog。

topic-B@{1}topic-A更新之前的"逻辑上"状态,例如.
在(4),比较(例如range-diff) 在HEAD@{-1}之间是检查结果的有意义的方法,同样可以在 (5) 通过比较topic-Btopic-B@{1}来完成。

但是有一个小故障。

在上面的步骤(3)中完成的合并到分离的HEAD中给了我们"Merge branch 'topic-A' into HEAD",并且没有说"into topic-B"。

教"--into-name=<branch>"选项到"git merge">(man)及其底层的git fmt-merge-message,假装我们正在合并到<branch>,无论我们实际上合并到哪个分支,当他们准备合并消息时。

git fmt-merge-msg现在在其手册页中包含:

'git fmt-merge-msg' [-m ] [--in-name] [--log[=] | --no-log]

--into-name <branch>

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

git merge现在在其手册页中包含:

--into-name <branch>

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

相关内容

最新更新