In git-flow, why does master even exist?
git, git-flow
Solution
You cannot simply tag `develop` for 2 reasons: `release` branches and `hotfixes` branches.
`release` branches - once you create your release branch from `develop` to prepare for a release, then you have your "release candidate" that will only get limited changes while the main development branch `develop` may continue to get additional commits not intended for this release, e.g. changes intended for a future release. Even if you merge the changes from the `release` branch into `develop`, you will still have additional commits on `develop` that aren't intended for release, i.e. you can't tag `develop`. Also note that `release` branches are temporary branches that go away after release while `master` (and `develop`) are long-lived "permanent" branches.
`hotfix` branches - A similar situation exists for a hotfix - you create a hotfix temporary branch (from your last release) to allow you to isolate which commits go into your hotfix release (just specific bugfixes).
You could tag the final commits of the `release` branches and `hotfix` branches and/or make those branches long-lived branches, but git-flow model uses `master` to track and connect the releases.
Problem
I was discussing git-flow with my coworkers and they brought up an interesting point. Why not tag releases off of develop instead of master? Master seems to exist for the sole purpose of tags. Maybe I missed something obvious when I read the entire article for git-flow.