In my current mindset, the /main branch has many child branches, one
for each development project in our application. Some projects takes 1
week to develop, others may takes 3 months. When project is dev. done,
and it is decided to be part of the next release, it is committed into
the /main. At this point, since the project will be part of the next
release, I think it should be propagated ASAP to the other child
branches, to keep them as close as possible to the /main (otherwise,
longer project would become way to much unsynced from /main).
Moreover, this allows child branches to use new features as soon as
those features are committed to the /main. It give also the
opportunity for child branches to adapt sooner to changes from the /
main, and may catch integration bug sooner.
However, I must confess that our mindshift toward a more agile
development process with branch per task pattern is not yet done.
So the model you describe is not all clear for me.
Where is the "next release" code in your model ? Is it all the changes
that is integrated into /main after the latest baseline label ? Is a
baseline = a version ?
What if a task is dev done, but we are unsure if it will be part of
the next release ? Does it remain *there* without being updated with
latest changes from /main ?