Skip to content

Navigate Branches and Worktrees

Switch between branches and navigate stacks seamlessly.

Overview

Navigation commands let you move between branches and worktrees without manually cd-ing to directories. They automatically allocate worktrees when needed—either creating a new one or using an available slot—so you can focus on the code rather than filesystem management.

erk br co (alias for erk branch checkout) is the most common navigation command. Give it a branch name and it switches you to that branch's worktree:

erk br co P1234-some-feature

This command handles several scenarios automatically:

  • Branch is checked out in a worktree: Switches to it
  • Branch exists but is not checked out in a worktree: Allocates one, then switches
  • Branch only exists on remote: Creates a tracking branch and allocates a worktree

Use this when you know the branch name and want to work on it.

erk wt co (alias for erk wt checkout) navigates by worktree name rather than branch name:

erk wt co some-worktree

The special keyword root always takes you to the original clone location.

Checkout a PR

erk pr co checks out a pull request by number or URL:

erk pr co 123
erk pr co https://github.com/owner/repo/pull/123

This fetches the PR's branch, allocates a worktree if needed, and switches to it. Use this when reviewing or iterating on someone else's PR.

When using Graphite for stacked PRs, erk up and erk down move through the stack:

erk up      # Move toward leaves (away from trunk)
erk down    # Move toward trunk (toward parent)

Stack terminology:

  • Up = toward children/leaves (away from main)
  • Down = toward parent (toward main)
main
 └── feature-base (erk down from here)
      └── feature-part-1 (current)
           └── feature-part-2 (erk up goes here)

After landing a PR, use --delete-current to clean up:

erk down --delete-current    # Land, then move down and delete current worktree

Both commands automatically allocate worktrees for stack branches that don't have them yet.

Move Current Branch to Another Worktree

Sometimes you create a branch in the root worktree (or any worktree you want to keep on a different branch) and decide you'd rather work on it in a dedicated worktree:

erk wt create --from-current-branch

This allocates a new worktree for your current branch and switches to it. The original worktree returns to whatever branch it had before (typically master or main).

Choosing the Right Command

Scenario Command
Know the branch name erk br co <branch>
Know the worktree name erk wt co <worktree>
Return to root repository erk wt co root
Review a PR erk pr co <number>
Move up the stack erk up
Move down the stack erk down
Land PR and navigate up erk pr land --up
Move current branch to new worktree erk wt create --from-current-branch

See Also

  • Worktrees - How worktrees work and why erk uses them