Unpopular Opinion: Git Sucks

Rian Schmidt

March 25, 2024

Table of Contents:

Git is Amazing
Git Sucks
An Opportunity
Thank You for Coming to My TED Talk

Maybe I'm just cranky today, but here's a thing I think nearly every day at least once. Git sucks.

Git is Amazing

I've been around for a minute. In my career, I've used cvs, sccs, subversion, Visual SourceSafe, and who knows what else. Each had their issues, but they all served, essentially, the same purpose-- save your work.

But they were slow. And they often lived in one place, a place that if something bad happened, your work was gone. They were insecure. Branching was either impossible or a real pain. They had a tendency to get borked in a way that you couldn't fix.

Then Linus Torvalds of Linux fame, of all people, came up with git. And, now, it's everywhere. It's fast and secure. It's distributed. You can manage huge projects, lots of branches, and different workflows. And that's all great, except...

Git Sucks

Well, to be more specific, the user experience with git sucks.

Learning to really use it to its fullest potential is more like learning spells than coding. The terminology is arcane and ambiguous. "Current" or "incoming"? Are you going "skip" that rebase or "abort" it? Maybe "continue"? Take a guess! What could go wrong?!

Plenty. You can force push a rebased branch and overwrite your history, for one thing. Now, user error is always going to exist, but I've been doing this for years and years, and I'm still never... 100% sure. I always flinch a little bit when I resolve conflicts. The hashes. The whole current, incoming thing. That damn >>>>> business.

The tooling isn't terribly helpful. People keep trying, but I think it's the same people who explain that if you don't totally understand how to use git, it's because you haven't tried. Or you need to watch another video. So, the arrows continue to point backwards and the terminology remains mostly unexplained. It's a staging area. You know, origin. Remote. You know what, just reset --hard HEAD~2, why don't you?

An Opportunity

I have to believe that the ubiquity of git implies a huge market for someone to get it right. A new set of tooling that helps users, particularly new ones, to understand the difference between their local repo, the remote repo, the staging area, upstream, a fork, and a branch. Maybe they all need new names. Maybe just clarification of what it all means without the gatekeepy condescension that I see all too often when someone asks if they should pick, fixup, squash, or drop that commit in their rebase that they now can't get out of. Abort! Wait, no! Skip!

Thank You for Coming to My TED Talk

I might be exaggerating a little. I generally love git. I very much enjoy how it enables collaboration and the security of knowing that I can delete whatever, and it'll still be in git's seemingly infinite memory.

I'm sort of amazed at the fact that something so ubiquitous in software development has not been addressed by the very audience it serves. I would love to see someone apply a user-centric design approach to build an alternative interface to git that was context-sensitive and went the extra mile to make options and actions crystal clear. Maybe this new wave of AI-enabled everything will come to the rescue. Let's hope.

Remember: Commit early and often.

Now, here's another video from a guy who's really trying. "Don't overthink this!"

Circinaut is a Fractional CTO services provider, based in Portland, Oregon, working with clients all across the country. I focus on application development, technology advising, and ongoing support for small and medium-sized businesses.
If your business is in need of a part-time CTO, a fractional CTO, or a contract technical consultant, drop me a line. I'm happy to have a quick chat to discuss your situation with no sales pressure at all (really!).