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 ot 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 respecive 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 featoure/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 pused 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 relaase branch. Once it is done git checkout master git merge --ff-only release/v1.00 # fast forward git tag v1.00 # tag is placed on the master 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 'master' and not from 'develop' and the branch is called hotfix/v1.01.