When you run git branch -r
why the blazes does it list origin/HEAD
? For example, there\'s a remote repo on GitHub, say, with two branches: master a
If "origin" is a remote repository, then origin/HEAD identifies the default branch on that remote repository.
Example:
$ git remote show
origin
$ git remote show origin
* remote origin
Fetch URL: git@github.com:walkerh/pipe-o-matic.git
Push URL: git@github.com:walkerh/pipe-o-matic.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
Note the line that says "HEAD branch: master". This is where the remote repository lets clients know which branch to checkout by default.
I was under the impression that dedicated remote repos (like GitHub where no one will ssh in and work on that code, but only pull or push, etc) didn't and shouldn't have a HEAD because there was, basically, no working copy. Not so?
I had the exact same impression like you said.
And I even can not delete that origin/HEAD remote-tracking branch cloned from github by doing
git branch -d -r origin/HEAD
This had no effect.
Can some one tell me how I can delete that origin/HEAD remote-tracking branch?
Though I did not found why there is a origin/HEAD created when clone from github, I find a way to delete it.
The new version of git provide
git remote set-head <name> -d
to delete the useless HEAD pointer of remote-tracking branch.
And we can also change the dumb default name 'origin' to whatever we want by using
git remote rename origin <new_name>
Hope this can help. :)
There's always a HEAD that points to the currently checked out branch on the remote repo (which may or may not be master). Even remote repositories have current branches. Usually it is master, and off the top of my head I can't think of any reason why one would want to change it, but it can be changed.
@robinst is correct.
In git, you can select which branch is checked out by default (i.e. when you clone). By default, origin/HEAD
will point at that.
On GitHub, You can change this in the Admin settings for your GitHub repo. You can also do it from the command-line via
git remote set-head origin trunk
or delete it altogether via
git remote set-head origin -d
Example. Look at the 'Switch Branches' drop-down. trunk
is checked, so origin/HEAD
follows trunk
.
The reason a bare repository can have a HEAD, is that because it determines which branch is initially checked out after a clone of the repository.
Normally, HEAD points to master, and that is the branch that is checked out when people clone the repository. Setting it to another branch (by editing HEAD in the bare repository) results in that branch being checked out on clone.
My guess is that someone pushed a branch and called it HEAD:
git push origin HEAD