Here's another article discussing git add -p: http://blog.tplus1.com/index.php/2008/10/31/break-up-changes...
Nice. Too bad I'm on svn. Though I suppose you'd want to be really careful about not creating a commit that's broken, e.g. by overlooking a declaration. Can you easily check whether currently staged changes still compile and/or pass a test?
yes, using the -k option of git stash allow you to 'put away' the changes which are not in the index.
The argument of creating a broken commit is natural, but not very relevant IMO: after all, with svn and co, the risk of forgetting to commit a new file is pretty strong as well. If you care very much about having non-broken commit, the only reliable solution is a gateway that merge commits only after they pass a test suite.
Highly recommend git-svn for committing from git locally to svn remote
I'm a big fan of "git gui". You can commit individual lines.