Dev branches for everyone, task branches if appropriate, releases are branched off of main and closed/locked/killed after a release. No working on main other than merging changes back to it. Though I got a feeling nobody will stick to that for small one-line fixes, especially since with git you might already consider your local repository as kind of a temporary branch (except if your machine dies, your changes are lost and you will push changes instead of actually merging).
You've basically just described git-flow. Tag your branches with prefixes so people know what is expected on that branch. Make use of 'hotfix/branch-name' for fixes that need to be done then have them merged to master.