Sync

The worktree header carries the branch, its path, a status chip, and three buttons: Fetch, Pull, Push. On a narrow pane they collapse to icons.

Fetch, Pull, Push

The status chip beside them says where you stand:

Chip Meaning
up to date Level with the upstream
n ahead n local commits not upstream
n behind n upstream commits not local (with · ↑n when both)
no upstream The branch does not track anything

A failure surfaces twice on purpose: as a chip flash in the header, which a narrow pane hides, and as an error toast, which is visible at any width and links to the Logs.

Pull is fetch plus fast-forward

Pull does not merge. It fetches, then fast-forwards. If the branch cannot be fast-forwarded, PwrGit stops and asks rather than creating a merge commit you did not request.

A pull with a dirty working tree still works. Local changes — tracked and untracked — are auto-stashed, the fast-forward runs, and the stash is reapplied. The progress line names each phase as it goes:

  1. Fetching updates…
  2. Preparing local changes…
  3. Fast-forwarding and checking out files…
  4. Reapplying local changes…
  5. Finishing refresh…

If reapplying hits a conflict, you are told, with the conflict markers left in the tree — it is not swallowed. If the pull fails after stashing, your work stays in the stash and PwrGit says so.

A pull that goes quiet is watched: a suspicious pause is flagged after two minutes, and a pull with no output at all for fifteen minutes is abandoned rather than hanging forever. That bounds a wedged credential helper or LFS filter without cutting off a genuinely large transfer.

When the branch has diverged

If the branch and its upstream each hold commits the other does not, PwrGit stops before changing either history and opens a dialog that shows you the situation: how many commits are local only, how many are remote only, and whether your working tree is clean.

It also lines the two histories up side by side. Where git can pair commits across them, it says so — matching subjects and identical +/− totals usually mean someone rebased or force-pushed, rather than that real work is about to be lost.

Two recovery actions:

Neither is offered while the working tree is dirty. Commit, stash, or discard first.

Reset a branch to its remote

Reset to remote branch…, from a worktree’s menu, does the same thing outside the pull flow: it points the local branch at the fetched remote tip.

This discards local-only commits on that branch. It is the right tool when a branch has drifted and you want the remote’s version, and the wrong one if you have work you have not pushed.

HTTPS authentication failures

When a pull — or Git LFS during checkout — cannot find usable HTTPS credentials, PwrGit offers to try the same repository over SSH instead of leaving you at a credential prompt.

It tests the equivalent SSH address first and reports whether SSH can actually read the repository. Only then does it offer to change the remote. Changing the remote changes the address git uses for both fetch and push, and PwrGit says so before you agree.

Push other refs

Beyond the header’s Push, PwrGit can push a chosen ref to a chosen destination. Before it runs, it names the relationship between the two ends:

Relation Meaning
Will create The destination branch does not exist yet
Up to date Nothing to send
Fast-forward The destination advances cleanly
Destination ahead The destination has commits you do not
Diverged Both sides have commits the other lacks

The first three are safe. The last two are not, and are marked accordingly — a push there would need to overwrite something.

Git LFS

When a repository needs Git LFS and it is not installed or not configured, PwrGit says so in place rather than letting the checkout produce pointer files that look like corrupted content. Once LFS is ready, the notice confirms it and dismisses itself.

When something fails quietly — Logs

Help → Logs, or Command+Shift+L (Ctrl+Shift+L), opens the Logs window. Error toasts link to it.

This is the escape hatch for anything that fails without a visible cause: a fetch that returns nothing, a push rejected by a hook, a credential helper that never answers. The window shows what PwrGit actually ran and what git said back.

The same log is written to pwrgit-main.log in the application data folder — see Uninstall for where that is on each platform.