Now, "git show" obviously does exactly what you probably wanted, but for future reference, the "git log" family of commands also take a "number of commits" limiter.
So you can also do things like
git log --cc -1 X
and it will actually do something very similar to "git show". It's not _quite_ identical, but it's close - at least for the special case of a single commit.
"git show" actually uses a magic "no_walk" internal flag which means that you can give it _several_ revisions, and it will take them as a raw "list" of revisions rather than take them as a command to "walk" the revision space and then just show one of them (like the "git log --cc -1" example would do).
So with "git show", you can do
git show X Y Z
and it will show those exact three commits. That's _different_ from
git log --cc -3 X Y Z
which will show the three "most recent" commits when you start walking the revision DAG. (The above "git log" command really doesn't make much sense, since the output will depend on commit date - it has well-specified behaviour, but it's really a pretty random thing to do: it might, for example, show the three commits X, X^ and Z, and not Y at all).
Anyway, "git show" is a very useful thing. It's actually one of the commands I use most. If I ever want to see what happened in a single commit (eg somebody sends me a bug-report and says "commit XYZ introduced a regression"), that's what I would use.
Looking at my history, the commands I tend to use most are:
git log
git diff
git pull <some-remote-repo>
gitk ORIG_HEAD..
git log -p some/directory/or/file
git grep -w <some-identifier> [possibly-some-subdirectory]
git show <some-rev>
and while I think that "git pull" and "gitk ORIG_HEAD.." thing tends to be something special to being a top-level maintainer (although maybe I'm wrong - you'd probably do the same just because you're following a remote tree under active development), all the rest are commands that everybody should know so intimately that they don't even need to think about them.
"git grep" in particular seems to be something that a lot of people haven't necessarily even realized is there. Yet it's actually extremely powerful and efficient both for the "current tree" and for "old revisions".
It's interesting: I used to do a lot of "plain grep" usage, but with git, most of my greps by far are all of the form "git grep". I've gotten so used to it that I find myself wanting to do "git grep" even on non-git stuff, and if I look at somebody elses tar-ball I often end up doing
git init-db
git add .
just to be able to do "git grep" on it. I've totally stopped doing the "find . -name '*.[ch]' | xargs grep -w" sequence that I _used_ to do a lot of.
Linus