hub sync silently dropped any local branch whose upstream it could not
resolve: it cleared its internal remote branch while leaving the "gone"
flag false, so neither the update nor the delete path ran. A run could
then print "Already up to date" having done nothing, which is why a
workspace-wide sync looked like it worked when it did not.
- report unmatched branches as UNTRACKED with the reason, so
"Already up to date" is only said when it is true
- resolve the remote default branch via `git ls-remote --symref` when
refs/remotes/<remote>/HEAD is missing, so merged branches whose
upstream was deleted are still cleaned up
- make --create-missing opt-in, keeping hub's default of never creating
a local branch that does not already exist
- summarise runs as changed/unchanged with per-action counts, and list
deletions and failures in full instead of leaving them in scrollback
- restore per-command flag help, which the custom Usage had dropped
- add an in-place CLI progress line, drawn only to a terminal so piped
and --json output stay free of cursor control
- group the TUI selection screen by outcome so blocked and dirty
repositories are visible before a run starts
🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
- add sync.go to fetch and prune the selected upstream, github, origin, or sole remote
- fast-forward the current branch with merge --ff-only and inactive branches with update-ref
- protect a dirty current branch and branches checked out in linked worktrees
- warn without changing divergent branches
- delete gone-upstream branches only after confirming they are merged into the remote default branch
- allow dirty repositories by default and retain the all-clean policy behind --strict
- return per-branch results in CLI, JSON, and TUI output
- add bare-remote integration tests, the hub MIT notice, and version 0.3.0