Using git worktrees
Skill alexei-led/cc-thingz/dist/cursor/git-flow/skills/using-git-worktrees
Portable skills, agents, hooks, and Pi extensions for Claude Code, Codex CLI, Copilot, Cursor, Grok, and Pi.
npx -y skills add alexei-led/cc-thingz --skill using-git-worktreesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
3.6 KB, as published. Nobody here has run it
Git Worktrees
Use one sibling worktree root per project: <project>.worktrees/<branch-slug>. Keep the main worktree clean on the integration branch by default. Trivial solo one-liners may stay in the main worktree when a worktree would add pointless ceremony.
Treat a worktree as a disposable branch folder. Remove it and its branch after the PR merges.
Scope
Use this skill when:
- starting a feature, fix, or experiment that should not disturb current work
- working on multiple branches at once
- trying competing approaches
- the current worktree has uncommitted changes and the user wants to start something else
Do not use this skill for:
- simple branch switching with no parallel work
- bulk branch or stale worktree cleanup — use
cleanup-git - git hook, Gitleaks,
.gitignore, or config setup — useconfiguring-git-hygiene
Create Workflow
Check state before any git worktree add:
git status --short
git branch --show-current
git worktree list
If the current worktree is dirty, ask whether to commit, stash, or proceed anyway. Do not stash silently.
Use the helper when available:
scripts/setup-worktree.sh <branch> [--base <ref>]
The helper creates <project>.worktrees/<branch-slug> from the main worktree root, handles existing local/remote branches, refuses path conflicts, and refuses dirty state unless --allow-dirty is passed after user approval.
Manual fallback lives in workflow.md.
Naming
- Root: sibling
<project>.worktrees/directory. - Directory: branch slug only; replace
/with-. - Examples:
fix-cron,feature-auth,bugfix-issue-123.
Cleanup Workflow
For one named worktree after PR merge:
scripts/cleanup-worktree.sh [branch]
The helper refuses unless gh confirms the PR is MERGED. Pass --force only after the user confirms the merge without gh or confirms the branch should be abandoned.
For bulk cleanup, stale worktrees, gone upstreams, or merged local branches, use cleanup-git.
Do not run git pull as part of cleanup. Pull the integration branch only after confirming the main worktree is checked out and clean.
Failure Handling
- Worktree path exists: pick a different branch/slug; never overwrite.
- Branch already exists remotely: check it out without
-bor use the helper. - Dirty current worktree: ask to commit, stash, or continue with explicit approval.
git worktree removefails because the worktree is dirty: confirm before--force.git branch -dfails after squash/rebase PR merge: confirm the PR isMERGED, then use-D.- Invoked from inside the worktree being removed: change to the main worktree before removing it.
Output
WORKTREE READY
==============
Action: CREATE | CLEANUP
Branch: <branch>
Path: <project>.worktrees/<slug>
Status: DONE | BLOCKED
Next:
- cd <path> and open the editor there, or
- pull the integration branch yourself after confirmed cleanup
For cleanup, report DONE only when the PR is confirmed MERGED or --force was used deliberately. Otherwise report BLOCKED with the script's reason.
References
- workflow.md — manual fallback and edge cases
- scripts/ —
setup-worktree.shandcleanup-worktree.sh