Below is a branching strategy using rebase that maintains a deployable master branch and stable staging branch for quality assurance testing.
###Branch Concepts
- master - always deployable to production
- staging - stable code base ready for pre-production testing, also the feature branch merge target
- features - one branch per feature, testable in development environments, only merged to staging once stable and ready to deploy
- patches - one branch per patch, urgent items that need applied to master branch ahead of staging and feature branches
Feature branches are agressively rebased on the staging branch by the feature developer. After completed, tested, and signed off (by at least one other developer), the feature branch is merged into staging for final testing. Patch/fix branches are derived from master and rebased if necessary before merging back in.