I had heard about gitflow before! But I though it just meant “this is how we git”. Which it kinda does, but it is a name for a specific approach. When people talk about GitFlow, they can mean:

From previous gig, I’ve been used to a straight forward world of trunk based development:

A source-control branching model, where developers collaborate on code in a single branch called trunk, resist any pressure to create other long-lived development branches by employing documented techniques. They therefore avoid merge hell, do not break the build, and live happily ever after.

That said, these notes are not really about upsides and downsides of gitflow vs trunk. This is only about me understanding the technical implications. Let’s go!

Main branches (unique and infinite)

  • master — always production-ready
  • develop — always with the latest delivered changes for the next release

Supporting branches (multiple and short)

  • features — branch off develop, work on feature, merge back to develop
  • releases — branch off develop, complete release, merge back to develop and to master
  • hotfixes — branch off master, fix, merge back to develop and to master

Release branches 🚀

I’ve honestly not been used to thinking much about releases. It was something that the automation handled in the background without any ceremony. The only time I dealt with a release number, is when debugging a problem in the deploy pipeline. But now I need to get a grip on releases.

Release branches support preparation of a new production release. They allow for last-minute dotting of i’s and crossing t’s. They allow for minor bug fixes and preparing meta-data for a release (version number, build dates, etc.). By doing all of this work on a release branch, the develop branch is cleared to receive features for the next big release.
– Vincent Driessen about GitFlow

Atlassian has a really nice tutorial on Comparing Workflows and describes that:

The Gitflow Workflow defines a strict branching model designed around the project release. This provides a robust framework for managing larger projects.

Hotfix branches 🔥

The essence is that work of team members (on the develop branch) can continue, while another person is preparing a quick production fix. – Vincent Driessen about GitFlow

Automating gitflow

What I misunderstood

I thought it would be fine to update a small thing with a branch and merge request to master.

What I understand better now

Using gitflow, there’s more effort involved in keeping the two main branches in sync. (When you do trunkbased, you can throw your hands up and not have to think much about branches. Any merge conflict is up to the owner of a feature branch to solve, because master alone is the boss.)

What I’m happy about

Many a h/t to the friend who thoroughly taught me git theory years ago — or gitflow would break my brain. (Now it only fries it a bit on the edges.)