Stacked diffs without learning Phabricator, Graphite, or pain.
Plot twist: branch stacking is the productivity unlock everyone has been circling for years, and GitButler is the first tool that makes it feel obvious. Drag a commit, the stack rebases. Push, every branch in the stack opens its own PR.
The Setup
Install the app, point it at a repo, and the UI replaces the "branches" mental model with "lanes". Each lane is a feature, each lane has a stack, and uncommitted changes float until you assign them.
# install
brew install --cask gitbutler
# or via the CLI for headless work
brew install gitbutler-cli
# create a stack of two dependent branches
but stack create --base main --branch feat/gallery-radii --branch feat/gallery-tiltThe Money Pattern
The trick is treating each logical unit as its own branch in a stack, then letting GitButler rebase the entire ladder when main moves. No more "this PR depends on the other PR being merged first" comments. The whole thing ships as a chain.
# assign uncommitted changes to a specific branch in the stack
but assign src/components/RadialGallery.tsx feat/gallery-tilt
# push every branch in the stack as a separate PR
but stack push --create-prs
# rebase the whole stack on top of main
but stack rebase --onto mainThe Catch
It's still very GUI-first. The CLI exists but lags the desktop app on features, so headless workflows or CI integration feel undercooked. And if you live in tmux + lazygit, swapping between worlds is jarring.
The Verdict
If your reviewers complain about giant PRs, GitButler fixes that problem in one weekend. Small stacked PRs land faster, review cleaner, and break less. Do not @ me — the diff sizes don't lie. Pair it with worktrees and the workflow sings.