编辑自动合并提交消息

时间:2015-03-02 15:21:24

标签: git merge

我想编辑Git的默认合并消息,我已经声明了服务器端挂钩,验证提交消息是否以7个数字开头 (例如“1234567 - 解决错误3”)。

有时我们在两个分支之间进行本地合并,因此,合并会生成一个默认的提交消息,而不包含这样的数字:“将分支'newBranch'合并到newBranch2”

如果开发人员没有看到自动合并消息,并在合并后进行另一次提交,当他将分支推送到组件时服务器拒绝推送导致合并消息错误。

如何将自动提交消息的前缀更改为“0000000 - ” 没有“--amend”而没有“git merge -m”?

2 个答案:

答案 0 :(得分:1)

--edit git merge标记git config --global alias.emerge 'merge --edit'https://www.kernel.org/pub/software/scm/git/docs/git-merge.html

  

- 修改

     

- 无修改

     

在提交成功的机械合并之前调用编辑器以进一步编辑自动生成的合并消息,以便用户可以   解释和证明合并。 --no-edit选项可用于   接受自动生成的消息(通常不鼓励这样做)。该   如果从命令行给出带-m选项的草稿消息并想在编辑器中编辑它,则--edit选项仍然有用。

     

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

<强>更新

为简化起见,您可以添加别名:

git emerge <branch>

然后只使用git merge --edit <branch>代替merge.ff

更新2

也许您不需要'能够编辑默认提交msg',而是创建单独的提交,即使是快进合并(这被认为是一个很好的做法,即使对于快进也可以单独提交) 。 您只需将false选项设置为git config merge.ff false即可。 运行git config --global merge.ff false(单个回购)或git merge(全部回购)。

  

merge.ff

     

默认情况下,git在合并时不会创建额外的合并提交   提交是当前提交的后代。相反,小费   当前分支是快进的。设置为false时,此变量   告诉git在这种情况下创建一个额外的合并提交(等效   从命令行给出--no-ff选项。设置为仅时,   只允许这样的快进合并(相当于给予   来自命令行的--ff-only选项。)

https://www.kernel.org/pub/software/scm/git/docs/git-config.html

执行此操作后,每个{{1}}命令将创建单独的提交,用户将被删除到消息编辑器

答案 1 :(得分:0)

merge.ff无效。

我在hooks目录中使用钩子脚本(prepare-commit-msg)完成了解决方案。 该脚本验证邮件内容是否包含单词“merge”,如果它没有“0000000”(零是我们在合并邮件中使用的默认值而不是票号)

#!/bin/sh
#
# Automatically add zeros in the merge commit message if it has not the zeros.
#
COMMIT_EDITMSG=$1
MERGE_MSG="0000000 - "
MERGE=$(cat $COMMIT_EDITMSG|grep -i 'merge'|wc -l)
NUMEROS=$(cat $COMMIT_EDITMSG|grep -i '000000'|wc -l)
if [ $MERGE -ne 0 ] && [ $NUMEROS -eq 0 ] ; then
        sed -i.bak -e "1s/^/$MERGE_MSG /" $1        
fi

因此,如果开发人员忘记将数字放在自动提交消息中,当他尝试将代码推送到assembla时,服务器将不会因为消息而阻止他的提交。