# git workflows --- ## goals * know what's in production * reduce conflicts * point in time snapshots (release branches, tags) * code reviews --- ## git flow * master * develop * feature/bug/refactor branches * hotfixes are a special case * release branches or git tags ---  ---  ---  --- ## trunk + feature branches * master * feature/bug/refactor/hotfix branches * git tags ---  ---  --- ## rebasing * squashing is just common courtesy * `git rebase -i HEAD~n` ---  ---  --- ## semver * semantic versioning * versions have meaning * easy for people and tools to parse * `vx.x.1` - patch (bugfix, dependency update, etc) * `vx.1.x` - non-breaking feature addition * `v1.x.x` - broke the API --- ## releasing * tags! * just pointers, they don't change anything * `git tag -a 'v1.1.1' -m "It's the best release yet!"` --- ## github things  --- ## more github things  --- ## github has so many things now  --- ## suggestions * required code reviews before merging * automated checks (pep8, etc) * no commits directly to develop/master * no releases directly from a branch (always a tag)