DEV Community

Richard Lemon
Richard Lemon

Posted on • Originally published at richardlemon.com

Why I Still Pay For Tower When Git CLI Is Free

Git CLI is great. I still pay for Tower.

I write a lot of Git commands by hand. I like the terminal. I like muscle memory. I also pay for Tower every year and I do not feel stupid about it.

This is not a pitch for Tower. Use whatever Git client you want. Or none at all. This is just my honest breakdown of when I reach for a visual Git tool instead of the CLI, and why that makes sense for how I work.

Because on paper, the CLI does it all. It is free, fast, scriptable, and lives in the same place as the code. So why do I still double-click a Git app?

Where my Git muscle memory actually stops

I am comfortable in Git. I have the usual aliases. gst for status. gco for checkout. gb for branch. The basics live in my fingers.

Here is the rough list of things I still instinctively do in the terminal:

  • Creating branches: gco -b feature/x
  • Small, obvious commits: git commit -am "Fix padding"
  • Quick rebases: git pull --rebase origin main
  • Interactive staging with git add -p when I am already in flow
  • Simple logs: git log --oneline --graph --decorate -20

If I know exactly what I want and I do it often enough, the CLI wins. It is faster, and my brain goes straight from intention to command.

The problem is not the commands I know by heart. The problem starts when the operation is slightly weird, has a few steps, or involves history surgery that I do only once every few weeks.

The honest list of things I kept Googling

If you have used Git for a while, you know this feeling. You want to fix something in history or clean up a messy branch, and suddenly you are on page three of Stack Overflow threads from 2014.

Before I started using Tower seriously, I noticed a clear pattern. These are some of the things that always broke my flow in the terminal:

  • Reordering or dropping a bunch of commits from a feature branch before opening a PR
  • Splitting one big, lazy commit into two meaningful ones
  • Staging very specific hunks across multiple files while keeping others for later
  • Undoing a commit that was already pushed, but safely, without nuking someone else’s work
  • Tracking which branch came from where in a long-lived feature branch jungle
  • Figuring out what exactly changed in a rebase after I finished it

Could I do all of this in the CLI? Of course. I did for years. With notes. And aliases. And occasional regret.

The problem is not capability. It is cognitive load. If every complex Git action costs me three tabs, a few blog posts, and a test repo to practice on, my actual work slows down.

Visual command versus muscle memory

The way I think about this is simple. The CLI is muscle memory. Tower is visual command.

Muscle memory is cheap and fast as long as the pattern is fixed. git commit will always be git commit. You do it ten times a day, it becomes automatic. Perfect.

Visual command is different. Instead of memorizing syntax, you visually inspect the thing you want to change, then you manipulate it directly. This costs more in UI overhead, but less in mental syntax juggling.

Git, in particular, is a tool where the data structure matters. Branches, parents, merges, detached heads, upstreams. It is an actual graph, not just a list of actions. A graph wants a visual.

Tower gives me that graph, plus verbs attached to it. Click a commit, see what it touches, and decide what to do with it. That is the core of the value for me.

Where Tower actually earns its subscription

Here are the concrete workflows where I happily leave the terminal and open Tower. This is where the subscription pays for itself in my head.

1. Cleaning up a branch before a PR

On side projects, I am sloppy. I commit half-baked stuff, I spike features, I throw in TODO comments. Before opening a real PR, I like to clean the history so it tells a sane story.

In Tower, I do this visually:

  • I open the branch and see the commit list as a tree
  • I scan the messages for noise like “temp test” or “oops”
  • I select a range of commits and use interactive rebase from the menu
  • I reorder or squash with drag and drop

I could use git rebase -i HEAD~7. I know the syntax. I have done it many times. I still prefer dragging commits around and seeing the result as a continuous tree.

The visual flow also lowers the “oh no, I ruined everything” anxiety. I can see what will happen before I hit continue. That matters more than I want to admit.

2. Staging exactly what I mean

Git staging is underrated. I think more people should use it deliberately. A good commit tells a focused story. The problem is that partial changes across many files are hard to juggle in your head.

In the CLI, git add -p is powerful, but the UX is cramped. Tiny diff windows, single-character commands, hard to jump around between files.

In Tower, the staging panel is where I live when I am shaping a commit:

  • I see all changed files, grouped by directory
  • I click through diffs with a big readable view
  • I stage individual hunks or even individual lines with the mouse
  • If a file belongs to two different logical changes, I split it cleanly between two commits

The result is that my commit history actually reflects how the feature evolved. Not just random save points.

Could I force myself to do this in the terminal? Yes. Would I actually do it consistently on a Friday afternoon? Probably not. The visual tool makes the good habit easier.

3. Understanding weird repository history

Every repo has that one branch that lived too long. Or that one merge from a few months ago that introduced something cursed.

When I need to understand how we got here, I do not want to read walls of text logs. I want a map.

In Tower, I can:

  • Scroll through the full graph of branches and merges
  • See where a feature branched off main and when it came back
  • Filter by branch, author, or search for “payment” in commit messages
  • Click a merge commit and see exactly what it merged

This kind of forensics is possible in the CLI with the right combination of git log flags. I have a few presets. They are still not as immediate as looking at a graph.

The payoff is simple. I reach understanding faster. That reduces the odds that I fix the wrong thing or patch over a deeper issue.

4. Recovering from mistakes without panic

Everyone messes up Git sooner or later. You reset the wrong thing. You hard force push. You commit to main by accident.

I am not immune. When I screw up, I care less about how to undo it and more about not making it worse.

Tower helps with that by making history recovery visible:

  • The reflog is in my face. I can literally see “where” I was before.
  • I can right-click an old state and reset the branch to it with options.
  • I can create a new branch from a previous commit before I touch anything else.

Yes, I could use git reflog and manually copy hashes. I have done that a lot. In a slightly stressful moment, I prefer clicking the known good state in a list and moving on.

Why I do not use Tower for everything

This is important. I do not think a Git GUI replaces the CLI. I think it sits next to it.

Here are situations where I almost always stay in the terminal:

  • Small projects or quick fixes where I know I will only do one or two commits
  • Working over SSH on a remote machine or Codespace
  • Automating things in scripts or git hooks
  • Anytime I am already deep in a Tmux / Vim workflow and opening a GUI would break flow

Sometimes Tower is open all day. Sometimes it stays closed for a week and everything happens in the CLI. That is fine. I treat it like a power tool, not a mandatory layer.

Why not just use the Git panel in the editor?

Most editors ship with some kind of Git integration. VS Code. WebStorm. You name it. So why not just use that instead of paying for a dedicated client?

I tried that route for a while. My personal issues with editor Git panels:

  • They are great for simple stage / commit / push loops, but weak for deep history work.
  • The graph views are often cramped inside a sidebar with too little space.
  • More complex operations still fall back to the terminal anyway.
  • I like my editor focused on code, not on being a full Git dashboard.

Tower feels like a separate, intentional context. When I open it, I am in "version control mode". I am not tempted to tweak code while I am trying to fix history. That separation is healthy for me.

The real cost: time, not money

Tower costs money. The CLI does not. That is the usual objection.

Here is how I think about it. I probably lose more money per month accidentally doomscrolling Twitter for ten minutes a day than I pay for Tower. The actual cost that hurts is time and mental friction.

If Tower saves me from two or three Git rabbit holes per month, it pays for itself. By “saves” I mean:

  • Fewer mistakes when rewriting history
  • Faster understanding of complicated merge situations
  • Less context switching between browser, docs, and a test repo

I am not religious about tools. If Tower vanished tomorrow, I would survive in pure CLI again. I just know my own patterns well enough now to admit that a good visual Git client makes me slightly more dangerous with less stress.

When a visual Git tool actually makes sense

I think a lot of "CLI vs GUI" debates are silly. The better framing is "what are you trying to minimize".

If you want to minimize dependencies and external tools, stay in the terminal and learn the deep Git stuff. That is a good path. You will not regret knowing Git well.

If you want to minimize context switching, errors under pressure, and repetitive Googling for arcane flags that you only use twice a year, then a visual tool starts to make sense.

For me, Tower hits a sweet spot:

  • CLI for fast, daily operations and automation
  • Tower for history surgery, commit shaping, and visual understanding

The tool is not the point. The point is getting confident enough with your version control that it almost disappears. I care about the code and the product more than how I told Git to shuffle bytes around.

So I pay for Tower. Not because the CLI is lacking, but because I would rather spend my brain cycles on the weird CSS edge case or that performance bug in the frontend instead of re-learning a rebase incantation I forgot three months ago.

Your threshold might be different. That is fine. But if you have been pretending the Git CLI gives you everything you need while secretly dreading every non-trivial history change, a visual client might be the cheaper thing to upgrade.

Top comments (0)