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 checkout <branch>" so that an existing branch can be
used if it already exists.  This makes it robust to previous
failures.

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 target branch.

Closes #3697