While I've used Git a bit, and appreciate for what it is, I will admit that it's syntax is what makes it a bit difficult. If the Git commands had kept to a single metaphor, then I think that would have helped tremendously. Even now, I'm still trying to figure out the best metaphor for using Git and it's commands. So far the closest I have is a tree metaphor as follows:
Git init = tree planted
Git add and Git merge = trunk grows
Git branch = branch grows
Git merge = branch intersects
And so on. But even this falls apart once I get to Git diff and Git checkout.