Desktop Material

Multi-remote fetch sync

The repository toolbar's ordinary Fetch action now reflects the complete configured topology. A checkout with more than one Git remote is fetched from every configured remote, so a mirror or secondary provider does not quietly remain stale while the button says it fetched origin.

[!NOTE] Since the MD3 shell landed, the toolbar band described below is behind Settings → Appearance → Show the classic toolbar, which ships on. Nothing here changed: the same Fetch action is also on the pane header of History, Changes and Branches, and in the pane menu, so the behaviour below is reachable with the band hidden.

Behavior

Configuration

There is no new preference. The scope is derived from the repository's live Git configuration whenever remotes are loaded. Add, rename, update, set-default, or remove remotes through the existing Remote Manager; the toolbar count and copy refresh with the repository state.

Failure modes and recovery

Security considerations

The multi-remote decision is made in the GitStore from the already loaded local remote records. The renderer receives only the remote count needed for truthful copy; it does not receive new credentials, refspecs, or arbitrary Git command arguments. Each fetch continues through the existing account-aware credential selection and bounded progress path.

This feature adds no HTTP endpoint, so a Postman collection is not applicable.

Verification

The focused regression coverage proves both sides of the behavior:

Run the focused suite with:

node script/test.mjs app/test/unit/git-store-test.ts app/test/unit/ui/push-pull-button-test.tsx --test-concurrency=1

Suggested articles