Gitflow with Fast Forward merges
Set up the develop branch on the central server. Needs to be done only once.
git clone URL
git checkout -b develop
git push -u origin develop
Developer sets up a local version of the develop branch. Each developer (in each clone) needs to do once.
git clone URL
git checkout -b develop origin/develop
When a developer starts to work on feature X, she needs to create a local branch and push it to the server.
git checkout -b feature/X
git push -u origin feature/X
Other developer who also wants to work on feature X, needs to create local branch for it tracking the respective remote branch.
git fetch
# Using git branch --remote make sure origin/feature/X already exists
git checkout feature/X origin/feature/X
Developers do they work on the feature/x branch and push it out to remote. Sometimes they fetch from remote and integrate the changes the other developer(s) of feature/x have done.
git add ....
git commit ...
git fetch
git merger origin/feature/X
git push
When the feature is finished one of the developers needs to integrate the changes in develop since the start of feature/X and feature/X itself. In order to keep feature/X intact we do this integration in a separate branch:
# first update develop
git fetch
git checkout develop
git merge --ff-only origin/develop # fast-forward
# create the integration branch
git checkout feature/X
git checkout -b integrate/X
git merge develop # there might be conflicts!
The branch integrate/X can be tested. If something is broken, the developers can fix it on feature/X and merge it again into integrate/X. Once the integration is done and the integrate/X was pushed to the central server,
git checkout integrate/X
git push -u origin integrate/X
At this point the branch integrate/X contains all the changes in develop and all the changes in feature/X and the developers have tested it. Now we can allow a tester to test this on her own machine:
git fetch
git checkout -b integrate/X origin/integrate/X
# Testing, if it failed, complain to the developers and then later:
git fetch
git checkout integrate/X
git merge --ff-only origin/integrate/X # fast-forward
Once the Tester accepts the version, the Chief Integrator (CI) - who is not necessarily a developer
- can now integrate this branch into develop using fast forward:
git fetch
git checkout develop
# Check if there are any changes on develop that are not yet in feature/X
# the next log should be empty
git log develop --not origin/integrate/X
git merge --ff-only origin/integrate/X # only if it is fast-forward
There is a separate command set for release and for hotfixes:
git checkout develop
git checkout -b release/v1.00
git push -u origin release/v1.00
# do some last minute work on the release branch. Once it is done
git checkout main
git merge --ff-only release/v1.00 # fast forward
git tag v1.00 # tag is placed on the main
git checkout release/v1.00
git merge develop # resolve conflicts if necessary
# Test
git checkout develop
git merge --ff-only release/v1.00 # fast forward
hotfix is the same as release except it stars from ‘main’ and not from ‘develop’ and the branch is called hotfix/v1.01.