(branching)=

# Push From Master

We deploy from the [master] branch once a week. If you commit something to master
that needs additional QA time, be sure to use a [waffle] feature flag.

## Local Branches

Most new code is developed in local one-off branches, usually encompassing one
or two patches to fix a bug.  Upstream doesn't care how you do local
development, but we don't want to see a merge commit every time you merge a
single patch from a branch.  Merge commits make for a noisy history, which is
not fun to look at and can make it difficult to cherry-pick hotfixes to a
release branch.  We do like to see merge commits when you're committing a set
of related patches from a feature branch.  The rule of thumb is to rebase and
use fast-forward merge for single patches or a branch of unrelated bug fixes,
but to use a merge commit if you have multiple commits that form a cohesive unit.

Here are some tips on [Using topic branches and interactive rebasing effectively](http://blog.mozilla.com/webdev/2011/11/21/git-using-topic-branches-and-interactive-rebasing-effectively/).

[master]: http://github.com/mozilla/addons-server/tree/master
[waffle]: https://github.com/jsocol/django-waffle