@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 The problem is that "branch" in git is a term that describes something else than the concept of "branching" in VCS means in general. Git branches can be used to support "VCS branching" workflows, but they can support other workflows too. It's crucial to understand what "branch" actually is in git's data model when one wants to get comfortable with git, and it has nothing to do with implementation details.
@wouter @b0rk I don't care about how git works and how it's implemented. I care about the model of data I work on when using it, and what I'm describing is how I think about it in my daily work, which helps me tremendously compared to some flawed models I used to apply in the past when I was less experienced.
I'm very much aware, thanks for git 101 (which I'm not needing, thanks)
I think that how you think about your daily work is sometimes more important than how the software itself works. For git branches, this very much applies.
You seem to disagree, which is fine. But just because the way I usually think about things is different from how things really are, doesn't mean I don't know how things really work.
@b0rk