Git Branch Manager: a manager for git branches

A logo that was completely generated with AI, like everything else in the project. (Source: ChatGPT)
I don’t mind the term “vibe coding“, when used correctly. A lot of people (at least on Reddit) seem to think it means “any time you code with AI.” I prefer Andrej Karpathy’s original definition: ”
There’s a new kind of coding I call “vibe coding”, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It’s possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. […] I ask for the dumbest things like “decrease the padding on the sidebar by half” because I’m too lazy to find it. I “Accept All” always, I don’t read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I’d have to really read through it for a while. Sometimes the LLMs can’t fix a bug so I just work around it or ask for random changes until it goes away. It’s not too bad for throwaway weekend projects.
Emphasis mine.
That last bit is key. For throwaway weekend projects, vibe coding is this magical state where you have an idea but absolutely no desire to setup boilerplate, read API documentation, or even want to deal with the plumbing. You just want the thing to exist.
A few evenings ago, I decided to put in a serious vibe coding session using one of my favorite tools, Claude Code via SSH through Blink on my iPhone (!), to create a CLI utility to help manage the endless number of branches I have on my machine, all because of our huge monorepo.
For reasons I’m not entirely sure about, I decided to use Python. A language I know approximately nothing about beyond “white-space matters”, “there’s probably a library for that,” and “print("Hello, world!")
.”
(Hey, I’d have to turn in my software engineering badge if I didn’t attempt to reinvent the wheel every so often)
So, picture this scenario: I’m staring at my terminal after I had just typed git branch
. I’m looking at a screen with about 37 branches in various states of decay. And of course there are numerous unhelpful branches with names like, daves/no-jira/hotfix
, daves/no-jira/hotfix-2
, daves/no-jira/hackweek-project-cool
. My terminal is just a wall of branch names, most of them mocking my organizational skills.
(By the way, what was hackweek-project-cool
? I don’t know… I never committed any code to it!)
I needed a better way to manage this chaos. So naturally, instead of cleaning up my branches like a responsible developer, I decided to build a tool. In a language I don’t know. Using only Claude Code. What could possibly go wrong?
Claude Code is great. It never gets tired. It never gets angry. Even if I kept asking questions and piling more features on top.
- “Let’s make a shell script using Python to display Git branches.”
- “Ohhh, can we make it show which branches have uncommitted changes?”
- “Oh, oh! Add some colors, but tasteful colors…”
- “Hey, there are a lot of branches here. What if pressing
shift
+d
deleted branches (but we should probably have a confirmation…)?” - “You know what it really needs now? A loading spinner!”
After a few hours of asynchronous back and forth, we had a result! Git Branch Manager: a terminal UI that actually shows useful information at a glance. Navigate your branches with arrow keys, see visual indicators for everything important, and perform common operations without memorizing Git commands.

For me, those little indicators are game changers:
*
Current branch[modified]
Has uncommitted changes[unpushed]
Exists locally but not on remote[merged]
Already merged (why is this still here?)↓
Remote branch you haven’t checked out yet
One feature that I love: Smart stash management. When you try to switch branches with uncommitted changes, gbm
asks if you want to stash them. But here’s the cool part: it remembers which stashes it created and gives you a notification when you switch back. Press ‘S’ and boom! Your changes are restored!
This process still blows my mind. I describe what I wanted in plain English, and Claude Code would translate these chaotic ideas into actual, working Python. “Make old branches look old” turned into color-coding based on commit age. “It should be smart about stashing” became an entire stash management system.
Installation is pretty simple, too. No pip, no dependencies, just curl and go:
# Quick install
sudo curl -L https://raw.githubusercontent.com/daveschumaker/gbm/main/git-branch-manager.py -o /usr/local/bin/git-bm
sudo chmod +x /usr/local/bin/git-bm
# Additionally, add as a git alias
git config --global alias.bm '!git-bm'
Now you can just type git bm
anywhere. Pretty neat!
There’s also browser integration (press b
on any branch), worktree support, and a bunch of other features I’m proud of, err, creating, despite not having touched the code.
Here’s the thing about vibe coding with AI: it completely changes what’s possible for a weekend project. I built a legitimate, useful tool in a language I don’t know and using standard libraries I’d never heard of.
If you asked me 6 months ago if someone with no knowledge could build useful tools or websites using AI prompts only, I might have said no. “You still need people who understand software engineering principles, who understand what the code is doing,” I’d (not so) confidently say.
But now… it’s getting crazy. Is this the future of programming? To be a glorified conductor who oversees an orchestra of AI agents? Maybe!
Bottom line: my Git branches have never looked better, and I didn’t have to spend six months learning Python to make it happen! So, if you’re buried in branches like I was, give gbm a shot: github.com/daveschumaker/gbm
Now if you’ll excuse me, I need to go stare at my beautifully organized branch list again.
P.S. Yes, I realize I could have just cleaned up my branches manually in less time than it took to build this. But where’s the fun in that?