Having fought and lost a battle not to do this,
we are currently planning on transitioning from
the old version (called ‘A’ below) to the new
(called ‘B’) by creating a TEMPORARY branch for
the new work, and at the end of the transition,
merging it into the old, which is then the only
branch. That is, at the end we have something
like the following:
/--a---a----------\
...--o---o n---n---A (HEAD)
\--b---b---b---b--/ with a starting-point of:
...--o---A (HEAD)
and with during-transition intermediate points
similar to:
/--a---A
...--*---*
\--b---b---B (HEAD) None of which isn't a problem per se.
The catch is a desire(? requirement?) that, when the
transition ends, people used to using B can continue
to use B, people used to using A can continue to use A,
and there is no difference. That is, after the end of
transition, branch names A and B are the same thing.
Always. Automatically.
Using a symref seems a working answer. That is,
after the merge, change B from a true branch head
into a symref pointing to A:
git merge ...
git symbolic-ref refs/heads/B refs/heads/A ▶ What are the gotchas?
▶ Are there other solutions?
I have written a test script to explore the idea,
and it seems to be working. The script is a bit
on the long side (c.500 lines) since it is trying
to exercise a number of different cases, so I
won't post it unless asked.
cheers!
-blf-