satellites: fix checkout sequence when merging requests

"git checkout -b" will fail when the target branch already exists in the
satellite repository, which makes gitlab unable to process merge
requests.

Use "git update-ref" plumbing command to update the branch pointer and
"git symbolic-ref" to change branches.  This avoids using the "git
checkout" porcelain and is robust to the case where the branch already
exists.

Use "git reset --hard" and "git clean" to ensure that the state is known
before attempting the merge.  A previously failed merge may leave behind
untracked files, for example, when the .gitignore rules change.

Use "--" to separate revspec from pathspec to avoid problems when users
have paths in their worktree which are identical to the name of the
remote branch.

Closes #3697