The question is simple: is refs/heads/master
the same thing as refs/remotes/origin/master
? If it is not in some cases, how can I know when it is not an
They are two different symbolic names that can point to different things. refs/heads/master
is a branch in your working copy named master
. Frequently that is a tracking branch of refs/remotes/origin/master
because origin
is the default name for the remote created by git clone
and its primary branch is usually also named master
.
You can see the difference between them with git rev-list refs/heads/master..refs/remotes/origin/master
which will be empty if they are the same and will otherwise list the commits between them.
The key difference to understand is that the branches under refs/heads/
are branches that, when you have one checked out, you can advance by creating new commits. Those under refs/remotes/
, however, are so-called "remote-tracking branches" - these refs just point to the commit that a remote repository was at the last time you did a git fetch <name-of-remote>
, or a successful git push
to the corresponding branch in that remote repository. (I wrote a blog post that talks about this difference at some length here.)