No matter which branching pattern chosen, you should try to keep your branches in a binary tree form like this:
trunk - tags
|
next
/ \ \
bugfix f1 f2
/ \ \
f11 f21 f22
- Child nodes should only merge with the direct parent.
- Try ur best to merge only the whole branch with the parent branch. never merge subfolders within a branch.
- You may cherry pick commits when needed as long as you only merge and pick from whole branch.
- The next branch in the above figure is only for illustration, you may not need it.