A `git fetch . origin/master:master` protects the currently checked out
branch (HEAD) unless the `-u/--update-head-ok` is supplied. This avoids a
mismatch between the index and HEAD. BUT branches which are HEADs in other
working trees do not get that care - their state is silently screwed up.
Is this intended behaviour or and just an oversight while implementing
`git worktree`?
Steps to reproduce
# setup
git clone -b master $SOMETHING xtemp
cd xtemp
git reset --hard HEAD~5 # pretend to be back some time
git worktree add ../xtemp-wt1
git worktree add ../xtemp-wt2
# test
git fetch . origin/master:master
fatal: Refusing to fetch into current branch refs/heads/master of
non-bare repository
fatal: The remote end hung up unexpectedly
# OK, current working tree is protected, try another one:
git fetch . origin/master:xtemp-wt1
From .
b4d1278..6e7b60d origin/master -> xtemp-wt1
cd ../xtemp-wt1
git status
# admire messed up working tree here
# The protection is really "current working tree", not "first/main working
tree"!
git fetch . origin/master:master
From .
b4d1278..6e7b60d origin/master -> master
cd ../xtemp
git status
# now it's messed up here too
# Try with "--update-head-ok" but check first.
cd ../xtemp-wt2
git fetch . origin/master:xtemp-wt2
fatal: Refusing to fetch into current branch refs/heads/xtemp-wt2 of
non-bare repository
fatal: The remote end hung up unexpectedly
git fetch --update-head-ok . origin/master:xtemp-wt2
From .
b4d1278..6e7b60d origin/master -> xtemp-wt2