New Persistent assistants now work in governed, cross-host teams. See what changed

Branches and tags

Switch branches, publish them, fetch, and create tags.

On this page

The current branch is shown in the Worktree header. Click it to open the branch switcher.

The branch switcher

The switcher lists every local and remote branch with a search box. Each row shows:

  • Whether it’s the current branch.
  • The configured upstream, if any.
  • A detached badge if you’re on a commit instead of a branch.
  • A prunable badge if the upstream is gone (the remote branch was deleted).

Click any branch to switch the current worktree to it. Right-click for per-branch actions:

  • Rename — only on the current branch.
  • Delete — requires confirmation; refuses unmerged branches without an extra force toggle.

To create a new branch, use New worktree (which also creates the branch) or use your shell. Plain “create branch but stay where I am” is intentionally out of scope here — the worktree-first model encourages a fresh tree per branch.

Pull, fetch, sync

The commit bar handles the common cases (Push, Pull, Sync, Publish — see Changes and commit). The Actions menu has the rest:

  • Pull — merge in upstream changes.
  • Pull with rebase — rebase your local commits onto upstream.
  • Sync — pull, then push.
  • Fetch — update remote-tracking refs without changing the working tree.

fetch is also worth running when you want the branch switcher to know about new remote branches without disturbing your working tree.

Publishing a branch

When a branch has no upstream, the commit bar shows Publish instead of Push. Click it; if you have only one remote it just runs git push -u <remote> <branch>. With multiple remotes you’ll be asked which to publish to.

Once published, the same button changes to Push and the branch switcher shows the upstream.

Tags

Two ways to create a tag:

  • From the History view, right-click any commit and choose Create tag.
  • From a dedicated Create Tag dialog reachable via the History toolbar.

The dialog asks for a tag name and an optional message (which makes it an annotated tag). Tags created this way push to the remote when you next push.