我如何定制git的合并提交消息?
每次我做一个合并,我需要一个合并提交生成,我希望它不仅仅是所有提交的摘要。
我的问题是如何格式git-fmt-merge-msg或什么决定了这个自动化的消息 (我可以通过修改它,并使用git-log –pretty = format:'…'来提交后手动执行此操作)
例如,我想格式化为:
合并分支“testing”
*testing:
[BZ:#123]第五承诺主题
[BZ:#123]第四个提交主题
[BZ:#123]第三个提交主题
[BZ:#123]第二个提交主题
[BZ:#123]第一个提交主题
合并细节:
[BZ:#123]第五承诺主题
在2010-06-30 11:29:00 +0100
– 第五承诺机构[BZ:#123]第四个提交主题
在2010-06-30 11:22:17 +0100
– 第四个承诺机构[BZ:#123]第三个提交主题
在2010-06-30 11:21:43 +0100
– 第三个承诺机构[BZ:#123]第二个提交主题
于2010-06-30 11:21:30 +0100
– 第二个承诺机构[BZ:#123]第一个提交主题
在2010-06-30 11:29:57 +0100
– 第一次承诺机构
编辑:
对于非理想的修复,请参阅下面的答案
但真正的问题是如何修改'fmt-merge-msg'生成的信息?
我知道这不是回答原来的问题,但为了像我这样的git noobs这个页面的好处,因为它是目前第一个Google的“git变更合并提交信息”的结果,我会提到这是可能的至:
git commit --amend -m"New commit message"
更改合并提交的提交消息,而不会丢失与合并提交的任何父级的链接。
看起来像版本Git 1.7.8你可以做git merge --edit ...
来指定提交信息。
截至1.7.10 ,放入编辑模式将是默认行为
从这个版本开始,交互式会话中的“git merge”命令将启动一个编辑器,当它自动parsing用户解释结果提交的合并时,就像“git commit”命令没有给出时一样提交消息。
(虽然我没有在Windows上的msysgit中看到它) 。
我发现解决这个问题有两种方法
注意 :不要同时使用两个,就好像提交未能合并一样,会再次将日志添加到底部。
个人说明 :我使用第一个解决scheme,因为它完全依赖于git的钩子和configuration属性,而不是外部脚本。
对于一个真正的解决scheme,必须扩展名为“fmt-merge-msg”的git命令,在传递–log选项时生成oneline描述(如果你真的需要这个解决scheme,你必须创build你自己的补丁git)并从源代码进行编译)。
1.按照VonC的build议使用prepare-commit-message
此解决scheme有问题,您需要中断提交,然后手动提交
设置将构build所需的提交消息的别名:
[alias] lm = log --pretty=format:'%s%n by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local
通过在$ GIT_DIR / hooks /(下面的示例脚本)中创build可执行的prepare-commit-msg来创buildprepare-commit-msg钩子。
#!/bin/sh #... case "$2,$3" in merge,) echo "Merge details:" >> $1 echo "" >> $1 git lm ORIG_HEAD..MERGE_HEAD >> "$1" ;; *) ;; esac
应该定义一个别名提交消息,如
[alias] m = merge --no-ff --no-commit
2.使用自动生成合并的自定义命令
(使用1中创build的lm别名)
#!/bin/sh echo "" echo "merge with commit details -- HEAD..$1" git merge --no-ff --no-log -m "`git lm HEAD..$1`" --no-commit $1
然后执行一个相当严格的命令:
./cmd-name <branch to merge>
如果您仍然想要提交提交的oneline描述,则需要向-m参数中添加新的命令或其他内容(如果使用了-log,则会在底部生成)
一旦你把<branch A>
合并到<branch B>
,git会自动提交一个消息,说“merge branch <branch A>
到<branch B>
。
如果你想定制git的合并提交信息,你可以尝试:
$ git commit --amend -m "Your merge message"
这个命令会把你的git的合并提交信息更新到提交信息中。
你也可以尝试:
$ git merge <branch A> --no-commit
它会把你的<branch B>
和<branch A>
合并成<branch A>
<Branch B>'s
提交和提交信息列表
如果它不能快进,那么你会得到这样的东西:
Automatic merge went well; stopped before committing as requested # check this with git status $ git status
它会告诉你,你的提交已经添加到阶段,但还没有提交,你可以提交它们而不运行git add
:
$ git commit -m "your merge commit message"
如果你想改变<branch B>
的最后提交信息,那么你可以试试:
$ git commit --amend -m "your new commit message"
但是,一般情况下,我们不更新其他提交消息,除非它们不正确。
假设,在git合并之后你会发生冲突,然后简单地解决你的冲突,并做:
$ git add . $ git commit -m "your commit message"
现在还有一个git-merge
的--log
选项,它只是你想要的一半 – 它将短日志(提交摘要)放在合并消息中。 不过,一个完整的解决scheme将不得不使用VonC的答案。
您可以尝试定义一个prepare-commit-msg钩子 ( 示例一会产生一些自定义的“默认提交消息”)
一个非常简单的bash函数,设置一个默认的消息并添加你的参数。 如果你想进行更改,它将使用--edit
开关打开你的编辑器。
编辑〜/ .bashrc或bash_aliases。 (不要忘记发送source ~/.bashrc
)在你的bashrc中应用修改
function mergedevelop() { git merge --no-ff --edit -m "master <-- develop: $1" develop; }
使用:
mergedevelop "PR #143..."
有消息:
大师< – develop:PR#143 …