@@ -383,6 +383,7 @@ k,[no]keep Keep branch after performing finish
383
383
D,[no]force_delete Force delete hotfix branch after finish
384
384
n,[no]notag Don't tag this hotfix
385
385
b,[no]nobackmerge Don't back-merge master, or tag if applicable, in develop
386
+ r,releaseBackmerge Back-merge to release branch if exists
386
387
S,[no]squash Squash hotfix during merge
387
388
T,tagname! Use given tag name
388
389
"
@@ -401,25 +402,27 @@ T,tagname! Use given tag name
401
402
DEFINE_boolean ' force_delete' false " force delete hotfix branch after finish" D
402
403
DEFINE_boolean ' notag' false " don't tag this hotfix" n
403
404
DEFINE_boolean ' nobackmerge' false " don't back-merge $MASTER_BRANCH , or tag if applicable, in $DEVELOP_BRANCH " b
405
+ DEFINE_boolean ' releasebackmerge' false " back-merge to release branch if exists" r
404
406
DEFINE_boolean ' squash' false " squash release during merge" S
405
407
DEFINE_boolean ' squash-info' false " add branch info during squash"
406
408
DEFINE_string ' tagname' " " " use the given tag name" T
407
409
408
410
# Override defaults with values from config
409
- gitflow_override_flag_boolean " hotfix.finish.fetch" " fetch"
410
- gitflow_override_flag_boolean " hotfix.finish.sign" " sign"
411
- gitflow_override_flag_boolean " hotfix.finish.push" " push"
412
- gitflow_override_flag_boolean " hotfix.finish.keep" " keep"
413
- gitflow_override_flag_boolean " hotfix.finish.keepremote" " keepremote"
414
- gitflow_override_flag_boolean " hotfix.finish.keeplocal" " keeplocal"
415
- gitflow_override_flag_boolean " hotfix.finish.force-delete" " force_delete"
416
- gitflow_override_flag_boolean " hotfix.finish.notag" " notag"
417
- gitflow_override_flag_boolean " hotfix.finish.nobackmerge" " nobackmerge"
418
- gitflow_override_flag_boolean " hotfix.finish.squash" " squash"
419
- gitflow_override_flag_boolean " hotfix.finish.squash-info" " squash_info"
420
- gitflow_override_flag_string " hotfix.finish.signingkey" " signingkey"
421
- gitflow_override_flag_string " hotfix.finish.message" " message"
422
- gitflow_override_flag_string " hotfix.finish.messagefile" " messagefile"
411
+ gitflow_override_flag_boolean " hotfix.finish.fetch" " fetch"
412
+ gitflow_override_flag_boolean " hotfix.finish.sign" " sign"
413
+ gitflow_override_flag_boolean " hotfix.finish.push" " push"
414
+ gitflow_override_flag_boolean " hotfix.finish.keep" " keep"
415
+ gitflow_override_flag_boolean " hotfix.finish.keepremote" " keepremote"
416
+ gitflow_override_flag_boolean " hotfix.finish.keeplocal" " keeplocal"
417
+ gitflow_override_flag_boolean " hotfix.finish.force-delete" " force_delete"
418
+ gitflow_override_flag_boolean " hotfix.finish.notag" " notag"
419
+ gitflow_override_flag_boolean " hotfix.finish.nobackmerge" " nobackmerge"
420
+ gitflow_override_flag_boolean " hotfix.finish.releasebackmerge" " releasebackmerge"
421
+ gitflow_override_flag_boolean " hotfix.finish.squash" " squash"
422
+ gitflow_override_flag_boolean " hotfix.finish.squash-info" " squash_info"
423
+ gitflow_override_flag_string " hotfix.finish.signingkey" " signingkey"
424
+ gitflow_override_flag_string " hotfix.finish.message" " message"
425
+ gitflow_override_flag_string " hotfix.finish.messagefile" " messagefile"
423
426
424
427
# Parse arguments
425
428
parse_args " $@ "
@@ -564,19 +567,54 @@ T,tagname! Use given tag name
564
567
else
565
568
commit=" $BASE_BRANCH "
566
569
fi
567
-
568
570
# merge master to develop
569
571
git_do checkout " $DEVELOP_BRANCH " || die " Could not check out branch '$DEVELOP_BRANCH '."
570
572
git_do merge --no-ff " $commit " || die " There were merge conflicts." # TODO: What do we do now?
571
573
fi
572
574
fi
573
575
576
+ if flag releasebackmerge; then
577
+ _releasePrefix=$( git config --get gitflow.prefix.release)
578
+ release_branches=$( git_local_branches_prefixed " $_releasePrefix " )
579
+ release_branch=
580
+ # Check if there is a release branch
581
+ if [ -n " $release_branches " ]; then
582
+ # Get the release branch name
583
+ release_branch=$( echo ${release_branches} | head -n1)
584
+ # Check if release branch exists on remote
585
+ if git_remote_branch_exists " $ORIGIN /$release_branch " ; then
586
+ # Try to merge into release.
587
+ # In case a previous attempt to finish this release branch has failed,
588
+ # but the merge into release was successful, we skip it now
589
+ if ! git_is_branch_merged_into " $MERGE_BRANCH " " $release_branch " ; then
590
+ git_do checkout " $release_branch " || die " Could not check out branch '$release_branch '."
591
+ # Accounting for 'git describe', if a release is tagged
592
+ # we use the tag commit instead of the branch.
593
+ if noflag notag; then
594
+ commit=" $VERSION_PREFIX$TAGNAME "
595
+ else
596
+ commit=" $BASE_BRANCH "
597
+ fi
598
+ else
599
+ commit=" $BRANCH "
600
+ fi
601
+ git_do merge --no-ff " $commit " || die " There were merge conflicts."
602
+ # TODO: What do we do now?
603
+ else
604
+ echo " Remote release $release_branch not found"
605
+ fi
606
+ fi
607
+ fi
608
+
574
609
run_post_hook " $VERSION_PREFIX$TAGNAME " " $ORIGIN " " $BRANCH "
575
610
576
611
if flag push; then
577
612
if [ " $BASE_BRANCH " = " $MASTER_BRANCH " ]; then
578
613
git_do push " $ORIGIN " " $DEVELOP_BRANCH " || die " Could not push branch '$DEVELOP_BRANCH ' to remote '$ORIGIN '."
579
614
fi
615
+ if [ -n " $release_branch " ]; then
616
+ git_do push " $ORIGIN " " $release_branch " || dir " Could not push branch '$release_branch ' to remote '$ORIGIN '."
617
+ fi
580
618
git_do push " $ORIGIN " " $BASE_BRANCH " || die " Could not push branch '$BASE_BRANCH ' to remote '$ORIGIN '."
581
619
if noflag notag; then
582
620
git_do push --tags " $ORIGIN " || die " Could not push tags to remote '$ORIGIN '."
@@ -623,6 +661,7 @@ T,tagname! Use given tag name
623
661
fi
624
662
if [ " $BASE_BRANCH " = " $MASTER_BRANCH " ]; then
625
663
[ " $commit " = " $BASE_BRANCH " ] && echo " - Master branch '$BASE_BRANCH ' has been back-merged into '$DEVELOP_BRANCH '"
664
+ [ -n " $release_branch " ] && echo " - Hotfix tag '$VERSION_PREFIX$TAGNAME ' has been back-merged into '$release_branch '"
626
665
[ " $commit " = " $VERSION_PREFIX$TAGNAME " ] && echo " - Hotfix tag '$VERSION_PREFIX$TAGNAME ' has been back-merged into '$DEVELOP_BRANCH '"
627
666
[ " $commit " = " $BRANCH " ] && echo " - Hotfix branch '$BRANCH ' has been merged into '$DEVELOP_BRANCH '"
628
667
fi
0 commit comments