Branch
Git Worktree Branch Naming from Porcelain Output
When using
git worktree list --porcelain, thebranchfield contains different formats depending on the worktree state.Key Points
- The
refs/heads/prefix indicates a local branch- The
refs/remotes/prefix indicates a remote-tracking branch- Special states use flags (
detached,bare) instead of branch names- This follows Git’s internal reference storage structure
Branch Field Formats
Local Branches
branch refs/heads/feature-branch
- Format:
refs/heads/<branch-name>- When: Worktree is checked out to a local branch
- Example:
refs/heads/main,refs/heads/developRemote Tracking Branches
branch refs/remotes/origin/feature-branch
- Format:
refs/remotes/<remote>/<branch-name>- When: Worktree is tracking a remote branch
- Example:
refs/remotes/origin/mainSpecial States
Detached HEAD
detached
- Field: No
branchfield, instead hasdetachedflag- When: HEAD points to specific commit, not a branch
- Example: After
git checkout <commit-hash>Bare Repository
bare
- Field: No
branchfield, instead hasbareflag- When: Repository has no working directory
- Example: Central repositories,
.gitdirectoriesUnknown State
branch unknown
- Format:
unknown- When: Branch information cannot be determined
- Example: Corrupted repository state
Reference Storage
Git stores references in a hierarchical namespace:
Link to original
refs/heads/- Local branchesrefs/remotes/- Remote-tracking branchesrefs/tags/- Tagsrefs/stash/- Stash entries