master
branch is always production-ready, deployable, 100% green test suite- New development is done on feature branches, with frequent rebasing onto master
- Clean commit history by preferring to rebase instead of merge (
git pull
is configured to automatically rebase)
-
Pull the latest from
origin/master
:git pull origin master
-
Create your feature branch
git checkout -b concise-feature-branch-name
-
Begin work on the new feature
-
Keep your feature branch updated with master by rebasing onto master:
git fetch origin master git rebase origin/master
or
git checkout master git pull git checkout concise-feature-branch-name git rebase master
Resolve any conflicts that occur during rebase.
-
Push your branch remotely and create a pull request when ready for peer review:
git push -u origin concise-feature-branch-name
Depending on peer review, keep pushing changes to the remote as needed.
-
Interactively rebase your feature branch onto master once the feature is approved and ready for production:
git rebase -i origin/master
-
Merge into
master
:git checkout master git pull origin master # The --no-ff is optional here...see the notes below git merge --no-ff concise-feature-branch-name git push origin master # This is also a good time to create a release tag git tag 1.0.10 git push 1.0.10
-
Remove all branches that have been merged into master:
git branch -d concise-feature-branch-name git push origin :concise-feature-branch-name
-
Git config for rebasing by default:
git config --global branch.autosetuprebase always git config --global pull.rebase true
-
Merging into master in step 7 with the --no-ff option will create a merge commit even if the merge could be a fast-forward. Having this merge commit is helpful in that it retains the commits that went into the feature branch. (If you don't care to keep this series of commits on a feature branch or the feature branch was a single commit, you can omit the
--no-ff
in the merge command and let it fast-foward.) Single-level merge bubbles like this are ok. Here's what we don't want:
https://www.atlassian.com/it/git/articles/simple-git-workflow-is-simple