Git branching can be an effective tool to compartmentalize feature development and maintain multiple work streams while evolving a project.
Here is a screencast that I put together to demo the way we introduce new features into projects here at Hashrocket. it is simplified somewhat, but the core principle remains:
- The master branch is always clean and deployable
- Develop features on feature branches
- Bring in changes from other streams and run integration tests on feature branches to guard against regression
- Merge code back to master and deploy