One thing you learn after using git for awhile is you get used to trying random things, and it will often just work. For example, if I want to know the differences between Linus’s kernel tree, and the Wolfson dev branch for a particular directory:
cbrake@happy:/build/linux-2.6$ git diff --stat origin/master..wolfson/dev sound/soc/codecs sound/soc/codecs/Kconfig | 125 +++ sound/soc/codecs/Makefile | 34 + sound/soc/codecs/ad1939.c | 690 +++++++++++++++ sound/soc/codecs/ad1939.h | 70 ++ sound/soc/codecs/ad1980.c | 309 +++++++ sound/soc/codecs/ad1980.h | 23 + sound/soc/codecs/cs4251x.c | 771 +++++++++++++++++
Another way to get similar information is:
git log origin/master..wolfson/dev sound/soc/codecs
If I’m working on a topic branch, and I want to see a summary of all the changes in my Topic branch:
git log --stat origin/master..origin/my_topic_branch > my_topic_branch_changelog.txt
One of the neat things about git branches is you don’t have to be on a branch to interact with it. You can diff, log, and checkout from branches other than the one you are currently in, and it is all very fast. For instance, if I want to grab the latest copy of a file in the Wolfson dev branch, I can do something like:
git log checkout wolfson/dev sound/soc/codecs/wm9713.c
Not that this is a very good idea, but just to illustrate a point. Git branches are amazing and make development work so much less tedious.