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:
- Fetching updates…
- Preparing local changes…
- Fast-forwarding and checking out files…
- Reapplying local changes…
- 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:
- Rebase local commits — replay your local-only commits on the upstream. Keeps their changes where it can, and may stop for conflicts.
- Reset to remote — discard the local-only commits and take the upstream’s tip. This one asks for a second confirmation.
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.