Feature Branches and Environment Branches
This question came up at work recently, so I wanted to document a solution for others.
The problem was we had two teams, with two long-running feature branches, both of which needed to use the same environment. In a nutshell the solution was to merge the two feature branches into a new environment branch. Don’t merge that new environment branch. You can keep it separate. I’ll elaborate.
Let’s say you have two long-running feature branches
feature-build-a-hurr-durr. Branch off of either one and make a
env-public-staging, so that it’s known that branch is specifically for that environment, and push merge commits to it pulling in the latest from the feature branches. This keep the feature work separate and lets the environment get the latest.
I ran these commands on git-school. You’ll see a few mistakes in the screenshots, but the commands I have documented here should be good.
git checkout -b develop git branch -d master git checkout -b feature-make-new-foo-bar develop git commit -m message git commit -m message git commit -m message git checkout -b feature-build-a-hurr-dur develop git commit -m message git commit -m message git commit -m message git checkout -b env-public-staging git merge feature-make-new-foo-bar
At this point we have the first go round of having both feature branches merged to the environment, but lets say we need more, no problem.
git checkout feature-make-new-foo-bar git commit -m message git commit -m message git commit -m message
Get some updates to feature-make-new-foo-bar, then use a merge commit to get them in env-public-staging
git checkout env-public-staging git merge feature-make-new-foo-bar
We can also go the other way.
git checkout feature-build-a-hurr-dur git commit -m message git commit -m message git commit -m message
Now merge into the env branch
git checkout env-public-staging git merge feature-build-a-hurr-dur
If you follow the history closely the feature branches don’t know anything about each other, but the environment can still pull in both feature branches just fine.
As one final point, branches are just pointers to commits, so if every thing gets merged to
develop, you can then pull that into
git checkout develop git commit -m message git commit -m message git commit -m message git checkout env-public-staging git merge develop