We have a developer team of 4 and have recently moved to Git. We want to learn best practices regarding workflow with branching and merging.
We are using a lightweight version of Git Flow. We have a dev, staging and a master branch which are all linear with each other.
On top of that we use feature and hotfix branches to work on new features and fix bugs.
I have the following questions:
I think we should branch from master and merge the feature branch up, because there might be something in dev that we might not want to merge to staging and master.
What is your opinion? What are the best practices?
While Git Flow is an excellent branching model, the questions you are asking are a symptom of a bigger problem: Git Flow is too heavy for a small team working on a consumer web product (I am making an assumption that you are working on consumer web product, feel free to ignore if you are coding nuclear power plant control room).
I would like to encourage you to consider Continuous Deployment (CD) with an extremely simple branching model:
It is very easy to setup CD nowadays:
master
for every new feature. master
, and watch it go live. There are a lot of common objections to it, that all can be summarized as "but what if I introduce a bug?!". The answer is "You'll fix it!". If you write tests, if you monitor your production site, if you do code reviews, if you practice pair programming, if you use feature flags, and if you keep your features small, then the benefits you get from CD will outweigh the occasional problems any day.
I encourage you to try. It will free your mind to focus on what truly matters: building a great product! If you do not believe me, take a look at this excellent presentation from Github.