Terminology - A Typical Branching and Merging Policy
A simple and useful branching policy. This is presented here just in order to give a framework of terminology for describing guidance measures for merging, not as a restriction on what is to be supported. Types of merge:
sync or catch-up: a merge that pulls into the target branch all source-branch changes that we “don’t yet have” in the target branch.
cherry-pick: a merge that pulls in one or more specified changes from the source branch.
reintegrate: similar to a sync merge, but intended to be used in the other direction
Assume a partial ordering among branches, such that any given branch has (0 or more) Feature Branches that are less stable than it, and Release Branches that are more stable than it, and it is considered the parent of each of those. A merge may be performed between a parent branch and one of its immediate Feature or Release branches, and nowhere else.
A merge to a Feature Branch from its parent is normally a catch-up.
A merge from a Feature Branch to its parent is normally a reintegrate.
A merge to a Release Branch from its parent is normally a cherry-pick.
A merge from a Release Branch to its parent could be a catch-up or a cherry-pick. (### Does a catch-up work properly if you’ve done cherry-picks in the other direction? Might not.)
A merge to or from a Release Branch may be forbidden in one direction, according to local policy.