Show all worktrees with their status. The table includes uncommitted changes, divergence from main and remote, and optional CI status.
The table renders progressively: branch names, paths, and commit hashes appear immediately, then status, divergence, and other columns fill in as background git operations complete. With --full, CI status fetches from the network — the table displays instantly and CI fills in as results arrive.
Examples
List all worktrees:
$ wt list
Branch Status HEAD± main↕ Path Remote⇅ Commit Age Message
@ feature-api + ↕⇡ +54 -5 ↑4 ↓1 ./repo.feature-api ⇡3 28d38c20 30m Add API tests
^ main ^⇅ ./repo ⇡1 ⇣1 2e6b7a8f 4d Merge fix-auth:…
+ fix-auth ↕| ↑2 ↓1 ./repo.fix-auth | 1d697d5b 5h Add secure token…
⚪ Showing 3 worktrees, 1 with changes, 2 ahead
Include CI status and conflict detection:
$ wt list --full
Branch Status HEAD± main↕ main…± Path Remote⇅ CI Commit Age
@ feature-api + ↕⇡ +54 -5 ↑4 ↓1 +234 -24 ./repo.feature-api ⇡3 ● 28d38c20 30m
^ main ^⇅ ./repo ⇡1 ⇣1 ● 2e6b7a8f 4d
+ fix-auth ↕| ↑2 ↓1 +25 -11 ./repo.fix-auth | ● 1d697d5b 5h
⚪ Showing 3 worktrees, 1 with changes, 2 ahead, 1 column hidden
Include branches that don't have worktrees:
$ wt list --branches --full
Branch Status HEAD± main↕ main…± Path Remote⇅ CI Commit Age
@ feature-api + ↕⇡ +54 -5 ↑4 ↓1 +234 -24 ./repo.feature-api ⇡3 ● 28d38c20 30m
^ main ^⇅ ./repo ⇡1 ⇣1 ● 2e6b7a8f 4d
+ fix-auth ↕| ↑2 ↓1 +25 -11 ./repo.fix-auth | ● 1d697d5b 5h
exp ↕ / ↑2 ↓1 +137 32936618 2d
wip ↕ / ↑1 ↓1 +33 6844b101 3d
⚪ Showing 3 worktrees, 2 branches, 1 with changes, 4 ahead, 1 column hidden
Output as JSON for scripting:
Columns
| Column | Shows |
|---|---|
| Branch | Branch name |
| Status | Compact symbols (see below) |
| HEAD± | Uncommitted changes: +added -deleted lines |
| main↕ | Commits ahead/behind main |
| main…± | Line diffs in commits ahead of main (--full) |
| Path | Worktree directory |
| Remote⇅ | Commits ahead/behind tracking branch |
| CI | Pipeline status (--full) |
| Commit | Short hash (8 chars) |
| Age | Time since last commit |
| Message | Last commit message (truncated) |
The CI column shows GitHub/GitLab pipeline status:
| Indicator | Meaning |
|---|---|
| ● green | All checks passed |
| ● blue | Checks running |
| ● red | Checks failed |
| ● yellow | Merge conflicts with base |
| ● gray | No checks configured |
| (blank) | No PR/MR found |
Any CI dot appears dimmed when there are unpushed local changes (stale status). CI indicators are clickable links to the PR page.
Status symbols
Symbols appear in the Status column in this order:
| Category | Symbol | Meaning |
|---|---|---|
| Working tree | + | Staged files |
! | Modified files (unstaged) | |
? | Untracked files | |
✖ | Merge conflicts | |
↻ | Rebase in progress | |
⋈ | Merge in progress | |
| Branch state | ⊘ | Would conflict if merged to main (--full only) |
≡ | Matches main (identical contents) | |
_ | No commits ahead, clean working tree | |
| Main divergence | ^ | Is the main branch |
↑ | Ahead of main | |
↓ | Behind main | |
↕ | Diverged from main | |
| Remote divergence | | | In sync with remote |
⇡ | Ahead of remote | |
⇣ | Behind remote | |
⇅ | Diverged from remote | |
| Worktree state | / | Branch without worktree |
⚑ | Path doesn't match template | |
⌫ | Prunable (directory missing) | |
⊠ | Locked worktree |
Rows are dimmed when the branch content is already in main (≡ matches main or _ no commits ahead).
JSON output
Query structured data with --format=json:
# Worktrees with conflicts
|
# Uncommitted changes
|
# Current worktree
|
# Branches ahead of main
|
Status fields:
working_tree:{untracked, modified, staged, renamed, deleted}branch_state:""|"Conflicts"|"MergeTreeConflicts"|"MatchesMain"|"NoCommits"git_operation:""|"Rebase"|"Merge"main_divergence:""|"Ahead"|"Behind"|"Diverged"upstream_divergence:""|"Ahead"|"Behind"|"Diverged"
Position fields:
is_main— Main worktreeis_current— Current directoryis_previous— Previous worktree from wt switch
See also
- wt select — Interactive worktree picker with live preview
Command reference
wt list - List worktrees and optionally branches
Usage: wt list [OPTIONS]
wt list <COMMAND>
Commands:
statusline Single-line status for shell prompts
Options:
--format <FORMAT>
Output format (table, json)
[default: table]
--branches
Include branches without worktrees
--remotes
Include remote branches
--full
Show CI, conflicts, diffs
--progressive
Show fast info immediately, update with slow info
Displays local data (branches, paths, status) first, then updates with remote data (CI, upstream) as it arrives. Auto-enabled for TTY.
-h, --help
Print help (see a summary with '-h')
Global Options:
-C <path>
Working directory for this command
--config <path>
User config file path
-v, --verbose
Show commands and debug info