We just started using something based on gitlab flow and I really prefer it versus the usual git flow we find. Here is the explanation: https://about.gitlab.com/2014/09/29/gitlab-flow/. Basically the principle is less branch better it is. And upstream first so never need to think about merging something back... We add on that release branches. So any change is done in master through PR. We have feature branch which could be deploy on our staging environment to let our QA department testing it before merging into master. Master should always be minimum stable. On day before release we create a release branch from master where QA does regression. When a bug which need to be fix is found we still fixing it in master and cherry-pick into release branch. When we release we merge to the production branch (only to have an history). It is: master production release/4.0.0 feature/{jira-story-code} personal branch for example for john doe would be jdoe/{jira-code} I hope it can help