This should be easier with Git 2.35 (Q1 2022): the default merge message prepared by "git merge"(man) records the name of the current branch; the name can now be overridden with a new option to allow users to pretend a merge is made on a different branch.
See commit bd2bc94 (20 Dec 2021) by Junio C Hamano (gitster).
(Merged by Junio C Hamano -- gitster -- in commit bb14cfd, 05 Jan 2022)
merge: allow to pretend a merge is made into a different branch
When a series of patches for a topic-B depends on having topic-A, the workflow to prepare the topic-B branch would look like this:
    $ git checkout -b topic-B main
    $ git merge --no-ff --no-edit topic-A
    $ git am <mbox-for-topic-B
When topic-A gets updated, recreating the first merge and rebasing the rest of the topic-B, all on detached HEAD, is a useful technique.
After updating topic-A with its new round of patches:
(0) $ git checkout topic-B
(1) $ prev=$(git rev-parse 'HEAD^{/^Merge branch .topic-A. into}')
(2) $ git checkout --detach $prev^1
(3) $ git merge --no-ff --no-edit topic-A
(4) $ git rebase --onto HEAD $prev @{-1}^0
(5) $ git checkout -B @{-1}
This will:
- (0) check out the current topic-B.
- (1) find the previous merge of topic-Aintotopic-B.
- (2) detach the HEAD to the parent of the previous merge.
- (3) merge the updated topic-Ato it.
- (4) reapply the patches to rebuild the rest of topic-B.
- (5) update topic-Bwith the result.
without contaminating the reflog of topic-B too much.
topic-B@{1} is the "logically previous" state before topic-A got updated, for example.
At (4), comparison (e.g. range-diff) between HEAD and @{-1} is a meaningful way to sanity check the result, and the same can be done at (5) by comparing topic-B and topic-B@{1}.
But there is one glitch.
The merge into the detached HEAD done in the step (3) above gives us "Merge branch 'topic-A' into HEAD", and does not say "into topic-B".
Teach the "--into-name=<branch>" option to "git merge"(man) and its underlying git fmt-merge-message, to pretend as if we were merging into <branch>, no matter what branch we are actually merging into, when they prepare the merge message.
git fmt-merge-msg now includes in its man page:
'git fmt-merge-msg' [-m ] [--into-name ] [--log[=] | --no-log]
--into-name <branch>
Prepare the merge message as if merging to the branch <branch>,
instead of the name of the real branch to which the merge is made.
git merge now includes in its man page:
--into-name <branch>
Prepare the default merge message as if merging to the branch
<branch>, instead of the name of the real branch to which
the merge is made.