The idea of this one is to have separate branches reserved for specific parts in development:
masterbranch is always the most recent production code. Experimental code does not belong here.
developbranch contains all of the latest development. These developmental changes can be pretty much anything, but larger features are reserved for their own branches. Code here is always worked on and merged into
releasebefore release / deployment.
hotfixbranches are for minor bug fixes, which cannot wait until the next release.
hotfixbranches come off of
masterand are merged back into both
releasebranches are used to release new development from
master. Any last minute changes, such as bumping version numbers, are done in the release branch, and then are merged back into
develop. When deploying a new version,
mastershould be tagged with the current version number (e.g. using semantic versioning) for future reference and easy rollback.
featurebranches are reserved for bigger features. These are specifically developed in designated branches and integrated with
developwhen finished. Dedicated
featurebranches help to separate development and to be able to deploy done features independently from each other.
A visual representation of this model:
The original representation of this model: