Since my post on converting mozilla-central to git I've had a few requests about what my git workflow is for Mozilla Development.

When working on bugs I'll create a git branch for development. The workflow in this branch looks like:

git fetch origin git checkout -b bug/123456 origin/master ...make changes... git commit ...make more changes... git commit

Occasionally I'll want to merge with the latest code from mozilla-central. I do this by rebasing my changes on top of the latest trunk code:

git fetch origin git rebase origin/master

I'll often have multiple temporary branches as I work on different ideas during the fix. I find being able to diff between the branches, cherry pick patches, etc useful.

When I've finished with the fix and want to generate a patch for review I rebase on top of trunk and squash all my commits down into one patch. I do this use git's interactive rebase:

git fetch origin git rebase -i origin/master ...squash commits into one commit and set commit message to my checkin commit message... git hgp >~/mypatch.patch

The last command, git hgp , uses an alias I got from Rafael Espindola's Blog. You can install this alias by adding the following to your ~/.gitconfig file:

[alias] hgp = show --format=\"From: %an <%ae>%n%s%n%b\" -U8

The adds an 'hgp' git command that does the same as git show but includes a header for the committers name. This allows an hg import of the patch to include the correct patch authors details which is useful if you use the checkin-needed keyword for others to commit the patch.

I attach the patch file to the bug for review. If I get review comments I then go back to the git branch and make the necessary changes. Regenerating the patch involves repeating the steps above.

When the patch needs to be committed to mozilla-central it can be imported and pushed directly using mercurial: