A while ago I started a thread discussing my desires to have submodules automatically update when I switch branches or pull. This I desired to occur only if my submodule revision conformed with the pointer recorded in the superproject's previous HEAD. In other words, if my submodule showed as "modified", and I switch branches, I would desire that this "modified" state persist exactly the same way an uncommitted change would.
I've created a local git hook to support this behavior. If it interests you, you may find it here, under 'git-post-checkout-submodules'.
http://github.com/timcharper/git-helpers/tree/master
Installation instructions are found at the top of the script.
Feedback welcome.
Tim