I think the branch diagrams not making sense is the core of your problems becoming fluent with git. You need to understand what a graph is, and specifically what a directed acyclic graph is. That's all there is to it.
Each vertex is a snapshot of the git-tracked contents of your project; each edge is a patch (or could be a collection of patches in the case of a merge).
A branch name is a pointer, always to the most recent node (commit) on the branch.
A tag name is a pointer to any node (commit) at all, not updated after a commit like a branch pointer is.
The common git commands (rebase, merge, etc.) should be easy to grasp and use given that basic knowledge.
I know and love graphs, including DAGs, and even sometime write C++ to operate upon them using boost::graph or my own representation.
I'm sure I can learn git, just as a casual user (we use P4 at my day job) I just haven't put in the time to learn about its branching and merging system, or had much occasion to practice it. I was hoping I would just absorb it magically, but git is using a lot of its own terminology and it's just doing something differently that I just don't feel like I know what I'm doing yet.
Each vertex is a snapshot of the git-tracked contents of your project; each edge is a patch (or could be a collection of patches in the case of a merge).
A branch name is a pointer, always to the most recent node (commit) on the branch.
A tag name is a pointer to any node (commit) at all, not updated after a commit like a branch pointer is.
The common git commands (rebase, merge, etc.) should be easy to grasp and use given that basic knowledge.