What moves origin/HEAD "organically"?
git clone
sets it once to the spot where HEAD is on origin
- it serves as the default branch to checkout after cloning with
git clone
What does HEAD on origin represent?
- on bare repositories (often repositories “on servers”) it serves as a marker for the default branch, because
git clone
uses it in such a way
- on non-bare repositories (local or remote), it reflects the repository’s current checkout
What sets origin/HEAD?
git clone
fetches and sets it
- it would make sense if
git fetch
updates it like any other reference, but it doesn’t
git remote set-head origin -a
fetches and sets it
- useful to update the local knowledge of what remote considers the “default branch”
Trivia
origin/HEAD
can also be set to any other value without contacting the remote: git remote set-head origin <branch>
- I see no use-case for this, except for testing
- unfortunately nothing is able to set HEAD on the remote
- older versions of git did not know which branch HEAD points to on the remote, only which commit hash it finally has: so it just hopefully picked a branch name pointing to the same hash