Daniel Barkalow [off-list ref] writes:
$ git checkout origin/master
$ git fetch
$ git checkout origin/next
Uncommited file '...' would be overwritten.
If HEAD is a symref to refs/remotes/origin/master, and you update
refs/remotes/origin/master, git will subsequently see that your index
doesn't match HEAD, and when you switch branches, it will try to apply a
revert to the branch you're switching to. It's the same issue as pushing
into a non-bare repository.
I think the idea here is to allow HEAD to point at outside refs/heads/,
e.g. refs/remotes/origin/master, but forbid commit and other commands from
updating HEAD and its underlying ref via update_ref() unless HEAD is
detached or points at a local branch.