Back in 2010, Vincent Driessen published a blog post about his team's branching strategy and accidentally created a monster. What started as "here's something that worked for us" somehow became gospel. Now every team feels like they need to use GitFlow because it sounds professional and structured.
Here's the thing nobody tells you: GitFlow is way too complex for what most teams actually need. Last year I watched a team spend two weeks trying to merge a month-old feature branch. The conflicts were so fucked they just rewrote the entire feature. That's not unusual - I've seen this pattern over and over where teams waste more time managing GitFlow than actually shipping code.
The Five-Branch Circus
The GitFlow branching model in all its overcomplicated glory
GitFlow uses five different branch types because apparently two wasn't enough:
The "permanent" branches:
master
: Supposedly production-ready code, but half the time it's broken because someone fucked up a hotfix mergedevelop
: Where all the feature branches go to die. Gets so messy you'll pray for merge conflicts just to end the suffering
The "temporary" branches (that live forever):
feature/*
: Individual features that were supposed to be short-lived but somehow take 3 monthsrelease/*
: Pre-production testing branches that become permanent because your QA process is garbagehotfix/*
: Emergency fixes that you'll forget to merge back to develop, breaking everything next release
The git-flow tools are basically abandoned at this point. Tried setting them up recently and it was a nightmare - tools just break on newer systems and nobody's maintaining them anymore. The original maintainer gave up years ago. Even the "active" forks throw cryptic errors constantly. Most developers waste hours debugging install issues then give up and just use regular git commands, which defeats the entire point of having GitFlow tooling.
GitHub stopped pushing GitFlow years ago in favor of their simpler GitHub Flow. GitLab created their own "GitLab Flow" specifically because GitFlow was too complex. Even Atlassian, who made a fortune selling GitFlow tutorials, now admits it's only suitable for teams with scheduled releases.
The Merge Conflict Nightmare
GitFlow proponents claim it reduces merge conflicts. That's bullshit.
Here's what actually happens: You branch feature/user-login
from develop
on Monday. By Friday, five other developers have merged their features to develop
. Your branch is now hopelessly behind. You can either:
- Merge
develop
into your feature branch (creating a ugly merge commit) - Rebase your feature branch (but GitFlow purists say this breaks the "visual history")
- Live with the inevitable merge conflicts when you finally merge
I've watched teams spend entire afternoons untangling GitFlow merge conflicts that wouldn't exist with a simpler workflow. Had one feature branch sitting around for weeks - when we finally tried to merge it, conflicts in damn near every file. Took longer to resolve the conflicts than it did to write the original feature.
Your daily reality with GitFlow: merge conflicts everywhere
When GitFlow Actually Works
GitFlow isn't completely useless. It works well when you have:
- Scheduled releases (monthly/quarterly) where you can't deploy whenever you want
- Large teams (20+ developers) who need coordination structure
- Enterprise environments where everything needs approval and documentation
- Mobile apps where Apple/Google control your deployment schedule
But if you're a web team deploying multiple times per day? GitFlow will slow you down and piss everyone off. The whole point of continuous deployment is to ship fast and fix fast. GitFlow's ceremony directly opposes this - you'll spend more time managing branches than shipping features.
GitFlow complexity vs GitHub Flow simplicity - guess which one actually works for most teams
The Tools Are Mostly Broken
GitFlow tool ecosystem - complex workflows require complex tooling that constantly breaks
IDE support is hit-or-miss:
- VS Code GitFlow extensions break randomly and the good ones get abandoned. I've installed three different extensions over the past year and all of them stopped working after VS Code updates.
- JetBrains has decent built-in support but it's still too complex for junior developers who just want to commit their code
- GitKraken makes it visual but you're still managing five different branch types, which means five different ways to fuck up your repository
The visual representation of GitFlow complexity - this is what your team will need to understand
SourceTree's GitFlow integration works until you need to do something slightly outside the happy path, then you're back to the command line debugging git-flow bash scripts. Tower and other Git GUI clients provide GitFlow integration but they can't hide the fundamental complexity. Even SourceTree's own documentation warns about the complexity and suggests considering simpler alternatives - which should tell you everything you need to know.