Skip to Content

Sync

Sync actions live next to the commit composer. All of them run git in the repository’s worktree and report their output in Git Output.

Fetch

  • Fetch updates remote-tracking refs for the default remote.
  • Fetch a specific remote from its row in the remotes panel.
  • Tags are fetched on request, not silently on every fetch.
  • Fetch never changes the working tree or the current branch.

Auto-fetch can run on an interval (Settings → Git → Auto-fetch, 0 to 240 minutes, 0 disables it). The interval is per installation, and the status bar shows when the repository was last fetched.

Pull

The pull mode is a single setting with three values:

ModeCommand shape
Mergegit pull with the configured merge behaviour
Rebasegit pull --rebase
Fast-forward onlygit pull --ff-only

Pull requires an upstream. If the current branch has none, the sync bar offers the same set-upstream path as push instead of failing with a raw Git error.

Pull from… pulls an arbitrary remote branch into the current branch, which is useful for reviewing a colleague’s branch without creating a local tracking branch first.

A pull that stops on conflicts stays in the workbench banner and opens the conflict resolver.

Push

ActionWhat it does
PushPushes the current branch to its upstream, setting it on first push
Push to remotePushes to an explicit remote
Push asPushes HEAD to a remote branch with a different name
Force push (with lease)Pushes with --force-with-lease, after writing a recovery snapshot of the remote-tracking tip
Set / unset upstreamWrites or removes the branch’s upstream configuration

Force-with-lease is the only force mode. It refuses to overwrite a remote branch that moved since your last fetch, which is exactly the case where a bare --force destroys someone else’s work. The snapshot it writes first covers the remote-tracking tip, so the overwritten state can be inspected and exported afterwards.

Long sync operations can be cancelled. Cancellation is reported as a cancellation, not as a failure.

The push preflight

Every outbound push runs a local scan before Git connects to the remote. The scan looks only at local objects — no fetch, no ls-remote, no forge call — and it is bounded so a large repository cannot stall it.

It reports three severities:

SeverityExampleWhat is required
Private key materialA committed key file or a key block in a diffThe push is blocked; it cannot be confirmed away
BlockingA secret-shaped assignment, a credential fileType the confirmation phrase before the push proceeds
WarningA newly added large file, a conflict marker, a suspicious stringAccept the warnings explicitly

The scan covers the commits, files and tags that the push would publish, with caps of 5000 commits, 20000 files and 200 reported issues. The approval is bound to the resolved target and the scanned tip, so changing the target, the branch or the content invalidates it and the scan runs again.

The large-file threshold is configurable in Settings (default 10 MB) and is skipped for LFS-tracked paths. The preflight is a local heuristic, not a secret scanner: it reduces the chance of publishing a key, and it does not guarantee that a push is safe.

Bulk operations

The workspace dashboard can fetch or pull a selection of repositories in one action. The result is a per-repository report: succeeded, failed with the Git error, or skipped with a reason (dirty working tree, diverged, no upstream, unborn branch, detached HEAD, bare repository). Nothing is retried automatically.

What sync does not do

  • It does not stash or commit your changes to make a pull succeed.
  • It does not rewrite a branch except through the explicit force-with-lease action.
  • It does not store remote credentials. Authentication is delegated to the system git, so credential helpers and SSH configuration behave as in a terminal.

Next

  • Workspace — dashboard, activity feed, code search.
  • Forge — pull requests and merges on the hosting provider.
  • Troubleshooting — authentication and lock problems.
Last updated