What is the best git gui client?
There are a lot of options for git gui. Give me some of your recommendations and why. Free and paid options welcomed.
9 comments
I really like the JetBrains IntelliJ family of IDEs, which include extensive Git and Github support (https://www.jetbrains.com/idea/features/#version-control)
You can see a visual graph, check things out, merge them, resolve conflicts (best diff viewer I've used), stash things, etc., etc. all inside the IDE itself. And integrated support for Github PRs is nice too, though that interface is still a bit young and clunky.
Mostly it's just great to be able to stay in the IDE and not need other tools. Switching between browsing Git and browsing a database and browsing code and editing Markdown all happens in the same IDE.
VScode is pretty darned good these days but IntelliJ still has more features out of the box, and its Git interface is IMO still a bit better than Gitlens.
You can see a visual graph, check things out, merge them, resolve conflicts (best diff viewer I've used), stash things, etc., etc. all inside the IDE itself. And integrated support for Github PRs is nice too, though that interface is still a bit young and clunky.
Mostly it's just great to be able to stay in the IDE and not need other tools. Switching between browsing Git and browsing a database and browsing code and editing Markdown all happens in the same IDE.
VScode is pretty darned good these days but IntelliJ still has more features out of the box, and its Git interface is IMO still a bit better than Gitlens.
VSCode's built-in Git features and the extension Git Graph are well-made, cross platform, and meets most basic needs. For complex operations, Git CLI is still necessary.
Fork is an excellent Git GUI for Mac and Windows. It's a paid product, and not open source.
https://fork.dev/
Also, DiffMerge is a useful tool that integrates well with a Git GUI, to visually compare and merge files on Windows, macOS, and Linux.
Fork is an excellent Git GUI for Mac and Windows. It's a paid product, and not open source.
https://fork.dev/
Also, DiffMerge is a useful tool that integrates well with a Git GUI, to visually compare and merge files on Windows, macOS, and Linux.
Depending on how flexible your definition of "GUI client" is, you should give Magit on Emacs a shot. The interface is primarily keyboard driven, rather than mouse driven (some basic mouse interactivity can be enabled). The learning curve is steeper, especially if you also need to learn the basics of Emacs (shouldn't take that long, really), but in the end I think it was totally worth it.
I have used Jetbrains' IDEs, the CLI with fish+abbreviations+fzf, Git kraken, tig, and SourceTree. I was not an Emacs user and Magit became the gateway drug that led me down that rabbit hole (I now have a 1000+ line literate config). I actually tried to stop using Emacs in order to unify my tooling but I couldn't wean myself off, just makes working with git way too easy for me.
Why is Magit good?
- First, it will appease those who suggest "just do it the CLI way" because Magit's "Transient" interface mostly just maps mnemonic keys to git commands and their respective flags. It does this while providing real-time hints/cheatsheet style documentation so it makes discovering some of git's functionality easier. As an example, if you want to fetch and prune from the command line, you would call `git fetch -p` or `git fetch --prune`. In Magit, just tap `f - p u` and you'll get the same thing. Interactive rebasing is also mostly done the same as doing it the CLI way.
- It has a lot of convenience functions for a lot of the standard git commands. While they might only represent a small percentage of your day-to-day workflow, it's nice when you can use it. For instance, sometimes I do all my "merging back into master" work so I can start a new branch, start working on a new feature, commit, but forgot that I was still on master. Rather than going through the usual hoops of starting a new branch with that commit and resetting master, Magit provides a "spin-off" and with just a few key strokes, your commit is in its own branch and master is back to normal. Commit extend/reword is another example of some of the small niceties that add up.
- It's all text. Some GUIs might have things you want to copy/paste but it's a button or graphical element, making you have to click on something else to make that text interactable. This also makes it pretty fast to work with.
I'm not saying Magit is the best git client, since that will largely depend on what you're looking for in a client, but at least for me it was. Give it a shot, see if you like it.
I have used Jetbrains' IDEs, the CLI with fish+abbreviations+fzf, Git kraken, tig, and SourceTree. I was not an Emacs user and Magit became the gateway drug that led me down that rabbit hole (I now have a 1000+ line literate config). I actually tried to stop using Emacs in order to unify my tooling but I couldn't wean myself off, just makes working with git way too easy for me.
Why is Magit good?
- First, it will appease those who suggest "just do it the CLI way" because Magit's "Transient" interface mostly just maps mnemonic keys to git commands and their respective flags. It does this while providing real-time hints/cheatsheet style documentation so it makes discovering some of git's functionality easier. As an example, if you want to fetch and prune from the command line, you would call `git fetch -p` or `git fetch --prune`. In Magit, just tap `f - p u` and you'll get the same thing. Interactive rebasing is also mostly done the same as doing it the CLI way.
- It has a lot of convenience functions for a lot of the standard git commands. While they might only represent a small percentage of your day-to-day workflow, it's nice when you can use it. For instance, sometimes I do all my "merging back into master" work so I can start a new branch, start working on a new feature, commit, but forgot that I was still on master. Rather than going through the usual hoops of starting a new branch with that commit and resetting master, Magit provides a "spin-off" and with just a few key strokes, your commit is in its own branch and master is back to normal. Commit extend/reword is another example of some of the small niceties that add up.
- It's all text. Some GUIs might have things you want to copy/paste but it's a button or graphical element, making you have to click on something else to make that text interactable. This also makes it pretty fast to work with.
I'm not saying Magit is the best git client, since that will largely depend on what you're looking for in a client, but at least for me it was. Give it a shot, see if you like it.
Tower is excellent if you only need a macOS and Windows… and I’m looking forward to where SublimeMerge is going, with a few plugins (once thats available) it could be an awesome git client.
Git kraken is pretty good. https://www.gitkraken.com/
They also make git lens for vs code which is an amazing tool.
They also make git lens for vs code which is an amazing tool.
magit in emacs
Anything you can do with a GUI, you can do faster and with higher confidence with the CLI. Stay away from toys like Git GUIs, and stick to the tools.
It's a serious question, yet your answer is to dismiss it and change the subject. You may find it hard to believe, but some people do not want to use the rather intricate git CLI.
Git is extremely new-user hostile, meant for people serious enough to want to learn a small language just to be able to manage their Vice history. Most people will never need the advanced features, and those who will can learn in a more visual environment if they choose to.