Git makes it easier than ever before to branch work, rewrite history, and merge/rebase from one branch to another, but the result can be a kind of branch chaos. The need to take an official release from some authoritative source ultimately collides with that chaos and makes Git hard to live with. The Git-flow model, proposed some years ago, solves that problem by defining structure and process.
Git-flow defines a hierarchy of branches and a protocol for merging code, which includes tagging important milestones along the way. Through these mechanisms, Git-flow lets devops teams receive work from multiple development teams and produce a release when (most) distributed version control systems lack any conception of a central or privileged server.