One of most common use cases of Gitflow
$ git flow init
# if you use default setup, you'll define six types of branches:
#
# main branches (lives forever)
#
# 1. master: for production releases
# 2. develop: for "next release" development
#
# supporting branches
#
# 3. feature: for a product feature
# 4. release: for preparation of a new production release
# 5. hotfix: for resolving critical bug of production version
# 6. support
#
# also, two main branches are created: master, develop
$ git flow feature start my_feature
# create branch 'feature/my_feature' based on the 'develop'
# made development and commits...
$ git flow feature finish my_feature
# merge 'feature/my_feature' back to the 'develop'
# delete 'feature/my_feature'
$ git flow release start my_release
# create branch 'release/my_release' based on the 'develop'
# made bug fixes...
$ git flow release finish my_release
# merge branch 'release/my_release' to the 'master' and add tag
# merge branch 'release/my_release' back to the 'develop'
# delete 'release/my_release'
$ git flow hotfix start my_hotfix
# create branch 'hotfix/my_hotfix' based on the 'master'
# made some hotfixes...
$ git flow hotfix finish my_hotfix
# merge branch 'hotfix/my_hotfix' back to the 'master' and add tag
# merge branch 'hotfix/my_hotfix' to the 'develop'
# delete 'hotfix/my_hotfix'