我正在使用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
答案 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