I'm always amazed at the amount of people that don't know that git comes with two very useful graphical utilities bundled. Here are two screenshots.
Git Gui
Git gui allows you to review the current diff, interactively add and remove hunks/lines/files from stage, commit your changes and amend the last commit. It can also be run whenever you have merge conflicts, however you still need to use an external merge tool to resolve them.
Gitk
Gitk is a bit more complicated, as it has a lot of features:
- browse history (view every commit of every branch, including diffs)
- manage branches (checkout, create, delete, reset branches)
- search history (a bit hard to use though)
For free!
Both of these tools are included and work in both the msysgit installation for Windows and when building from source on Mac OS X (and presumably linux). On Mac OS X, you get nicer results in gitk if you have built tk with quartz support (else X11 will be launched everytime). Macports has a working variant that works out of the box.
There are also other tools, mainly for Mac OS X, such as GitX and GitNub that are a lot prettier, but I've found that both git gui and gitk are working for me so I have no desire to switch yet.
Tips
I have defined two functions for git gui and gitk so that they are launched without blocking:
function gitg
{
command git gui &
}
function gitk
{
command gitk --all &
}
The --all switch to gitk makes it display all the branches, instead of just the current one.
Hopefully people will stop claiming git lacks graphical tools. It might be more difficult to initially grok than say, Mercurial, but it doesn't lack the tools!
Comments
This post is older than 30 days and comments have been turned off.



Comment by Christos Trochalakis , 1 year, 1 month ago :
git command line friendliness is also getting better all the time.
For shortcuts you might want to use the internal "alias" mechanism of git so you don't depend to the shell (git help config, search for alias).
$ git config --global alias.k '!gitk --all &'
$ git config --global alias.g '!git gui &'
$ git k
$ git g