如何使“ git merge --log”停止展平合并提交

时间:2018-10-05 14:32:01

标签: git merge feature-branch

我正在使用a successful git branching model,那里的master分支仅由带有版本标签的合并提交组成,所有开发都在develop分支上进行。

develop分支还包括合并提交(功能分支)和普通提交(小的个人更改)。

执行新版本发布时,我希望git使我成为chengelog。 git merge develop --log会这样做,但是此“展开”的合并会在develop上提交,导致历史记录保持不变。

我想仅在develop上使用'git merge --log',这可能吗?

示例:

合并时我现在通常会得到什么:

Merge branch 'develop' into master

* develop:
  fix 1 on branch develop
  fix 2 on branch develop
  fix 1 on branch b1
  fix 2 on branch b1
  fix 3 on branch b1
  fix 1 on branch b2
  fix 2 on branch b2
  fix 1 on branch b3

我想要的是什么

Merge branch 'develop' into master

* develop:
  fix 1 on branch develop
  fix 2 on branch develop
  Merge branch 'b1' into develop
  Merge branch 'b2' into develop
  Merge branch 'b3' into develop

1 个答案:

答案 0 :(得分:1)

要获取正在进行的合并所需的日志,请使用

git log --pretty='  %s' --first-parent ..MERGE_HEAD  # with e.g. `-10` to limit to 10

或使用merge^1..merge^2作为范围来查看从现有合并中得到的结果。

最快进行抽烟测试的方法可能是git merge --log=1来生成正确的样板,然后在Vim中成为

:/^\*/+,+!git log --pretty='  \%s' --first-parent ..MERGE_HEAD

以所需的方式填写日志。要使其自动化,您需要使用prepare-commit-msg钩子,类似

case $2 in
merge)
        git log --pretty='  %s' --first-parent ..MERGE_HEAD >${tempfile=`mktemp`}
        sed -i '/^\*/,/^$/ { //!d }; /^\*/ r '$tempfile  "$1"
        rm $tempfile
        ;;
esac

编辑:在GNU /任何东西上,钩子变得更简单,因为sed的功能更强大:

case $2 in
merge)
        git log --pretty='  %s' --first-parent ..MERGE_HEAD \
        | sed -i '/^\*/,/^$/ { //!d }; /^\*/ r /dev/stdin' "$1"
        ;;
esac