I have been reading and practicing with git. I have a question about the pointer HEAD
. I understand that it is a special pointer that points to the current branch, but if I do git branch --all
, all I see is this:
* Test_Branch_1
main
remotes/origin/HEAD -> origin/main
remotes/origin/Test_Branch_1
remotes/origin/main
This makes sense. I can see my remote main
branch and HEAD
pointing at it. But I also see a *
next to Test_Branch_1
which seems to indicate that HEAD
is also pointed at Test_Branch_1
? If I look at my last commit on Test_Branch_1
by doing git log -1
I see something like:
commit checksum (HEAD -> Test_Branch_1)
Merge: ...
Author: ...
Date: ...
Again, HEAD
appears to be pointing at Test_Branch_1
. It would appear there is a local and remote version of HEAD
? The local one keeps track of which branch I am on locally? In this case the local version of Test_Branch_1
? And the remote version of HEAD
never changes in practice (i.e., always points at main
)?
Is that correct or am I misinterpreting this?
CodePudding user response:
Your interpretation is correct.
remotes/origin/HEAD
is a local alias for a remote branch.
It points to what you want to be the default branch for origin
allowing you to use origin
instead of (for ex.) origin/main
wherever it makes sense.
You can set/delete it with git remote set-head origin main
/ git remote set-head -d origin
Again this has no effects on the remote repository and is not shared with your team mates.
As a side note, because you can have multiple origins, you can have multiple remotes/.../HEAD
.
For more info take a look at the doc of git remote set-head