Git-flow is a branching model for Git that defines strict handling of main, develop and support branches. It utilizes feature branches for new development, release branches to prepare releases and hotfix branches for emergency fixes to production. The main branches are main and develop, while auxiliary branches include feature, release and hotfix branches used to contribute code changes.