Why does my 'git branch' have no master?
I'm a git newbie and I keep reading about a "master" branch. Is "master" just a conventional name that people used or does it have special meaning like HEAD
?
When I do git branch
on the clone that I have, I only see 1 single branch - the one I'm on. No "master" at all. If I type git checkout master
(as I see in alot of tutorials or guides), I get
error: pathspec 'master' did not match any file(s) known to git.
I'm just confused as to why my clone doesn't have a master
that everyone seems to imply that it always exists.
To checkout a branch which does not exist locally but is in the remote repo you could use this command:
git checkout -t -b master origin/master
Most Git repositories use master
as the main (and default) branch - if you initialize a new Git repo via git init
, it will have master
checked out by default.
However, if you clone a repository, the default branch you have is whatever the remote's HEAD
points to (HEAD
is actually a symbolic ref that points to a branch name). So if the repository you cloned had a HEAD
pointed to, say, foo
, then your clone will just have a foo
branch.
The remote you cloned from might still have a master
branch (you could check with git ls-remote origin master
), but you wouldn't have created a local version of that branch by default, because git clone
only checks out the remote's HEAD
.
master
is just the name of a branch, there's nothing magic about it except it's created by default when a new repository is created.
You can add it back with git checkout -b master
.
I actually had the same problem with a completely new repository. I had even tried creating one with git checkout -b master
, but it would not create the branch. I then realized if I made some changes and committed them, git created my master branch.
In my case there was a develop branch but no master branch. Therefore I cloned the repository pointing the newly created HEAD to the existing branch. Then I created the missing master branch and update HEAD to point to the new master branch.
git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master