This is very easy indeed with SmartGit (which is why I rarely used command line).
Look at this:
If I click on “Log” (top right) I get this:
Now I can select some arbitrary commit, say 5E74C789, I can then see the files in that commit on the right hand side:
Now the powerful part, here’s what I get if I right click a file - say SmartPointer.cs:
You can see “Save As…” if I click that I get this:
So I can save the file as it looked before that commit or after the changes that were made in that commit.
This is extremely helpful for those ocassions where you simply want to “restore” a single file to some earlier state, you may have made hundreds of changes over many commits but then decide “You know, that constants file with hindsight should have been left alone on this project and the stuff put into a new file” for example.
This is a huge help on those rare ocassions when one wants to do this, in effect this is letting you revert changes to individual files even though those changes might be mixed up with other files.
You do of course get prompted if the file exists when you try to save, letting you verifty that you do indeed want to overwrite the current file, and of course once you do save it you then simply commit that as a change say “Reverted file to its state at XXX”.