Here is that e-mail. Forgive any typos.
First, here is a site with some good general information and examples. Scroll down to read about git flow.
Git flow is a popular way of managing revisions centered around a few basic ideas and actions. It is built into recent version of git and supported by clients like the free SourceTree and the commercial Tower apps.
You start git flow with two main branches, master and develop.
The master branch is never modified directly. It is the code for the currently released version of the app and it is only updated on a new release.
The develop branch is never modified directly either. It starts as a branch of the current master and is updated with changes that are developed in other branches (“feature” or “hotfix”, see below). The key here is that the develop branch should always be in a state where it can become the new master at a moment’s notice.
Git flow is then concerned with the actions that we as developers might take. The first common action is to start a “feature”. This feature should be appropriately named, e.g., “Add_invoice_query_window”, and is usually branched off of develop, although it can start from any commit or branch. The developer works in this branch to add and test his code, committing as he goes. Once complete, he “finishes” the feature. By choosing “finish”, git flow merges the feature branch into develop and optionally deletes the branch.
Each developer can have as many simultaneous features as needed and can manually merge one feature into another, or cherry pick changes from any other branch.
The next action that a developer might need is a “hotfix”. By starting a hotfix, git flow will branch off of master, not develop, and the purpose of a hotfix is to correct a bug that came up in the currently released version that cannot wait for the next release. Once a hotfix is “finished”, git flow will merge it back both into master and develop. At that point, the new master should be compiled and released.
The final action is the “release”, started after all the needed features have been merged into develop and it’s ready to be deployed. This is where you can make final changes like updating the version number, release notes, etc. When a release is “finished”, git flow will merge it into master and develop, and tag that branch with the version number. After that, the next cycle begins.
In short, start a feature (or features), make it work, finish a feature. When all your features are done, start a release, update version, etc., finish the release. If a bug in the currently deployed version comes to light, start a hotfix, fix the bug, finish the hotfix. By using “start” and “finish” through git flow, it handles the appropriate merging and tagging for you.