@b0rk #1 doesn't make any sense and easily falls apart at edge cases, if you think this way you'll sooner or later make yourself confused; #2 can be useful when reasoning or talking about repo topology as a kind of mental shortcut (and actually applies to any commit, not just those pointed to by branches); #3 is the truth.
@wouter @b0rk The question was about git branches specifically, your reply seems off-topic to me. The implementation doesn't matter (otherwise the answer would be "it's a file"); what matters is git's data model, which is what the user operates on conceptually and where the concept of branch is clearly defined. When the model in your head doesn't match the real one, you're setting yourself up for trouble (or xkcd 1597 :P)
@wouter @b0rk It's not "technical implementation", it's the whole concept of a branch in git. Understanding that lets you use branches in git with ease regardless of context they appear in. You don't have to bother with technical implementation at all, it doesn't matter - the concept does.
The option one does not help to understand git, I have repos where branches don't "branch off" from any common point at all. Such a model in one's head just causes confusion.
Me, angry? Not even close 😉
@b0rk