Recover a diverged checkpoint ref by fetch+replay instead of leaving it queued
Commit

Build on the non-force push: when a per-checkpoint ref is rejected (it diverged on the remote — the same checkpoint re-written elsewhere), instead of just leaving it queued, fetch the remote ref and replay the local-only commits on top via the existing fetchAndRebaseRefCommon, then retry. The retry stays non-force (after the replay the local ref is a fast-forward over the remote), so the remote's commit is preserved as an ancestor, never overwritten. The cherry-pick is delta-based, so non-overlapping changes merge; a genuine overlap (both sides rewrote the same file) surfaces as a rebase error and the ref is left for a later pre-push — degrading to the previous safe behavior, never to a force overwrite.
pre-push keeps the batch push as the fast path (one round-trip when everything fast-forwards) and falls back to this per-ref recovery only for rejected refs, removing from the queue just those that land. Adds a test proving a diverged ref ends up with both the remote-only and local-only changes after recovery.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com Entire-Checkpoint: 5ac4c261b57a