我正在使用一个成功的 git 分支模型,其中您master
分支仅由带有版本标签的合并提交组成,并且所有开发都在develop
分支中进行。
develop
分支还包括合并提交(功能分支(和普通提交(小的单个更改(。
当我执行新版本发布时,我希望 git 让我成为一个 chengelog。git merge develop --log
这样做,但这种"展开"合并在develop
上提交,导致平面历史记录。
我想让"git merge --log"只在develop
上使用提交,这可能吗?
例子:
合并时我现在得到的
: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
若要获取所需的动态合并日志,请使用
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的buffier:
case $2 in
merge)
git log --pretty=' %s' --first-parent ..MERGE_HEAD
| sed -i '/^*/,/^$/ { //!d }; /^*/ r /dev/stdin' "$1"
;;
esac