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.
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 avoids problems
when users have paths in their worktree which are identical to
the name of the remote branch.

Closes #3697