Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.