Как заставить "git merge --log" остановить уплощение коммитов слияния - PullRequest
0 голосов
/ 05 октября 2018

Я использую успешную модель git-ветвления , где у вас есть master ветвь, состоящая только из коммитов слияния с тегами версий, и вся разработка идет на develop ветке.

Ветвь develop также состоит из коммитов слияния (ветви функций) и обычных коммитов (небольшие индивидуальные изменения).

Когда я выполняю выпуск новой версии, я хочу, чтобы git сделал меня ченгелогом.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

1 Ответ

0 голосов
/ 05 октября 2018

Чтобы получить журнал, который вы хотите объединить в полете, используйте

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

edit: в GNU / что угодно, хук становится проще, потому что буфер sed:

case $2 in
merge)
        git log --pretty='  %s' --first-parent ..MERGE_HEAD \
        | sed -i '/^\*/,/^$/ { //!d }; /^\*/ r /dev/stdin' "$1"
        ;;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...