I'm pretty new to git, but I've been playing around with it on a remote server I set up and I'm pretty sure that I understand the basics.
I just set up gitlab and pushed some of my code to a new project on it. What I did was:
- Get all my code in a directory
- git init
- git add .
- git commit -m "Initial commit"
- git push origin master
Where origin was set up with:
git remote add origin git@1.2.3.4:myproject.git
Now when I do git branch -a I see:
* master
remotes/origin/master
Whereas when I was playing around before, I always saw:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
I understand that the head is a pointer the currently checked out branch, so shouldn't it exist on the origin? Why wasn't it created?
Don't worry much about this remote
HEAD
. This line is simply artifact of the way original clone works, and represents state of remote'sHEAD
.It can be considered as a default branch that is preferred by server (even on remote bare repository) - it will be checked out by your client
git clone
by default if-b branch
option was not used.Your local file
.git/refs/remotes/origin/HEAD
probably contains stringref: refs/remotes/origin/master
now. You can remove it if you want (not that I recommend doing it, mind you), andgit branch -a
will not show it anymore.Except for this usage of remote
HEAD
as default branch for first clone, for you state of remoteHEAD
never matters. You should only worry about state of real remote branches, not remoteHEAD
as it only makes sense for remote state as its default selected branch. And if remote is bare repository, it does not make much sense even on remote.And the reason why you did not see remote HEAD when you did
git remote add ...
,git fetch
,git pull
is because in that case git did not have to make a decision on which default remote branch to pickup by default.You can set it by command
git remote set-head origin -a
, which automatically set origin/HEAD to point to appropriate remote branch. Or usinggit remote set-head origin <branch>
to specify a remote branch to point.Also see: https://stackoverflow.com/a/8841024/1851492