`git checkout woot; git merge his/foo`?
> Um ... why should I even have to care?
Because it helps encourage separating work logically, and gives you quick way to reset your working tree to a known state should merging upstream changes go awry?
> Why aren't we just working on the same branch by default?
You are, you just create topic branches off the development one to focus a series of commits on some goal. When you're ready to share it, just merge it into the development branch and push it. If you and your colleague are working on a topic together, you do the same, just push to some common remote branch for that topic.
> What happens when I type "git push"?
In Git 2.0, it pushes the current branch iff it tracks a remote upstream one; otherwise it prints an error explaining how to set the upstream branch for the current branch.
> So, is that before or after having been gc'd?
GCing only removes garbage. Since you're creating branches to keep track of your topics, this shouldn't ever be a problem. If you had no references to a commit, it must not have been important!
> Which branches did you get? etc.
As far as I know, cloning gets every branch from a remote; not all branches will automatically have tracking branches, but making those is easy enough.
> Worst, they are ways that you can corrupt your repository or blow your code away.
Do you mean making incompatible commits via rebasing by "corruption," or are you referring to actual repository data loss due to bugs? I'm unaware of the latter. If you consistently make temporary private branches, it should be impossible to lose work.
Is graph theory really that complicated? I always thought it was one of the more intuitive compsci topics, since it's very visual. Maybe that's my bias, though.
I try Mercurial every once in a while, so I'm not basing my opinion only on old versions (in fact, I just played around with it again today.) I always feel constrained--like it's trying to prevent me from doing what I want to do. A lot of it is familiarity, I'm sure, and differences in nomenclature (though, I'll say, "checkout" makes a lot more sense than "update" to me--I would assume that "update" would be analogous to "fetch").