Git GUIs and why I don’t like them
I’m pretty competent with the Git command-line interface, and I use it for most things. But sometimes, especially when I’m navigating a particularly thorny rebase, I like to be able to browse the commit history and view diffs as I go. For this I like to keep a Git GUI around, but none of them are particularly appealing to me. Here are the reasons why, largely for my own future reference.
Gitk
gitk is installed by default with Git (except on, like, macOS where you have
to brew install git-gui
separately) and is Perfectly Adequate. It is mediocre
and doesn’t do much but it does show the repo history and the diffs in a split
view, and it works fine.
The diff viewer can ignore whitespace and you can hide added/removed lines. You can easily copy the commit hash, and you can search for commits with a few options:
- Commits containing a string (
--grep
option togit log
, I think) - Commits touching paths (extra arguments to
git log
, though not sure how this interacts with regexp filtering) - Commits adding/removing a string (I think this is the
-S
option togit log
) - Commits changing lines matching a string (
-G
option togit log
)
Additionally, you can use exact matches, ignore case, or use regexp patterns for searching, and you can choose which fields of the commit to search (all, headlinge, comments, author, or commiter).
I’m laying this out as the sort of minimum viable Git GUI feature-set. There are other things I’d like (for example, easy file history, interactively expanding context sections, syntax highlighting) but I don’t want anything there to be missing.
GitFiend
GitFiend (I’m trying version 0.32.0) is a free Git GUI for macOS, Windows, and Linux.
- No way to view a diff and the commit history at the same time.
- No search feature (described as a “work in progress” on the website).
- You can view a particular branch, or commits by a particular author. Not very general though.
GitUp
GitUp (no version information on the website) is another free Git GUI for macOS (exclusively?).
- No way to view a diff and the commit history at the same time.
- Does have a search feature! Searches “branches, tags, users, commit messages, and even commit diffs” with a setting. No way to search one of those specifically, as far as I can tell.
- Has a pane for committing changes, and a pane for viewing stashes. That’s neat.
Fork
Fork is a Git client for macOS and Windows (not Linux?) that costs $50 with a free evaluation period.
- Seems fairly polished! None of the weird graphical glitches I’m used to in the other clients. Animations are smooth and generally unobtrusive, it looks like an actual Mac App (not sure about Windows), and has most of the features I want.
- Filtering to a specific branch takes me a bit to discover, and the UI sort of implies it’s part of a generalized commit filtering interface, but there don’t seem to be any filters other than “the current branch”.
- There’s a log of
git
commands Fork runs, which is an appreciated bit of insight into what it’s doing. - There seems to be a branch selection widget with a nice search feature and as part of a separate button a branch creation widget, which looks like it has a dropdown for more options but doesn’t. Kind of weird.
- Does let me view history and diffs at the same time! I can even pop the diff view out into another window.
- The diff interface is actually pretty nice; has a “view entire file” button and a side-by-side diff mode.
- Has a search feature that lets me search commit messages, authors, paths, and diff content, and lets me filter results to the current branch, but no regexp search.
- Also lets me view the entire file tree at any commit, which is nice.
- Doesn’t let me hide the left sidebar, though.
Tower
Tower is a Git client for macOS and Windows which costs $70 per year (!). At least from marketing, it looks like they’re building a fairly well-featured app with that money. They advertise drag and drop, easy undos, “a unique conflict wizard”, and file history, all features I want!
The list of improvements in the most recent version of Tower are also pretty compelling — branch comparison and filtering, the sorts of interactive query-type features that are really well suited to GUIs.
- No way to hide the left sidebar.
- Kinda weird diff view — you can’t adjust or view context except through a menu item, there’s not a button nearby or anything.
- Lots of interesting features nestled away, including pull requests, but no way to comment on pull requests even through the built-in GitHub integration…
- Has a “view file at commit” feature but it doesn’t seem to work for me.
I was decently excited about this one but nothing really elevates it above
gitk
or Fork for me.
SmartGit
SmartGit is a Git GUI for macOS, Windows, and Linux that costs $60–90/year or $264–330 for a lifetime license (with a few options in between).
- You can hide all the sidebars, and it looks like you can drag them around to rearrange the panels, but you can’t, which is unfortunate. You can close and reopen any of them, though, which is nice and more than all the other clients do.
- Decent diff view, lets you expand context lines which is nice but doesn’t have great syntax highlighting. Has a side-by-side view.
- Has an interesting blame-like tool called “investigate” which tries to figure out the origin of certain changes, letting you go back in the history step by step. Pretty cool feature with a pretty cool UI, and unique among all these GUIs too!
- Has a nice search feature which does support regexps as well as arbitrary combinations of authors, committers, commit messages, refs, ID, name, and content! (Not sure what all of those mean.)
GitKraken
GitKraken is a Git GUI client for macOS, Windows, and Linux (free, $5/mo to interact with private GitHub repos through GitHub).
- Gave them a lot of GitHub permissions to sign up, I guess that’s fine.
- Has activity/audit logs, I like that!
- Appears to have a display scaling feature but only lets you choose amounts between 80% and 130% in 10% increments?
- Lets me hide the left sidebar!
- Lets me choose if I want the commit info on bottom or on the right.
- Not a ton of UI customization… I can’t really reorganize the panels at all.
- Weird shortcuts/keyboard support — I can view commits from a single branch, but it seems to be a right click action with no shortcut or anything. Feels like a common operation.
- Doesn’t let me view history and a diff at the same time.
- Has an interesting split view with a terminal on top and Git info on the bottom, which has a diff viewer that doesn’t take up the whole screen. I want that in the main view!
GitAhead
GitAhead was a free Git GUI client for macOS that’s been discontinued as of September 2021. RIP, it was nice when I used it (but not amazing).
Conclusion
None of the Git GUIs seem that good. At least SmartGit has a feature I can’t (easily) get with the command-line. Everything else feels like it’s lagging behind.