Agent Skills: Git Worktree Workflows

>

UncategorizedID: mthines/gw-tools/git-worktree-workflows

Install this agent skill to your local

pnpm dlx add-skill https://github.com/mthines/gw-tools/tree/HEAD/skills/git-worktree-workflows

Skill Files

Browse the full folder contents for git-worktree-workflows.

Download Skill

Loading file tree…

skills/git-worktree-workflows/SKILL.md

Skill Metadata

Name
git-worktree-workflows
Description
>

Git Worktree Workflows

Master Git worktrees using the gw CLI tool for optimized parallel development workflows.

MANDATORY: Always Use gw, Never Raw git worktree

Non-negotiable in any repo where gw is installed. Check with which gw; if missing, suggest brew install mthines/gw-tools/gw or npm install -g @gw-tools/gw.

| Instead of | Use | Why it matters | | ---------------------------------------------- | -------------------------------------- | ----------------------------------------------------------- | | git worktree add ../feat feat | gw checkout feat | Auto-copies files, runs hooks, remote probe, auto-cd | | git worktree remove feat | gw remove feat | Prunes orphan branch, protects main | | git checkout -b feat | gw checkout feat | Isolated worktree instead of in-place branch switch | | git checkout main (when main is another wt) | gw checkout main | Detects existing worktree and navigates instead of erroring | | cd ../feat | gw cd feat | Partial matching, works from any depth | | git fetch && git checkout pr-branch | gw pr <number> | Handles fork PRs, auto-copies, runs hooks | | Manually cp ../main/.env .env after worktree | Configure autoCopyFiles in gw init | One-time setup, auto-copies forever after |

Rules

| Rule | Description | | --------------------------------------------- | ---------------------------------------------------------------------------------------- | | fundamentals | HIGH - Core concepts of Git worktrees, what they share/don't share, when to use them | | creation | HIGH - Creating worktrees with gw checkout, remote fetch behavior, auto-copy files | | navigation | MEDIUM - Navigating with gw cd and gw checkout, shell integration setup | | inspection | LOW - Listing worktrees with gw list, understanding worktree states | | cleanup | MEDIUM - Removing worktrees, gw clean, gw prune, disk space management | | troubleshooting | HIGH - Common errors and solutions, recovery procedures |

Workflow Patterns

| Pattern | Description | | -------------------------------------------------------- | ------------------------------------------------------------- | | feature-branch | HIGH - Feature development workflow with worktrees | | hotfix | HIGH - Urgent bug fixes without interrupting feature work | | code-review | HIGH - Review PRs in isolated environments with gw pr | | parallel-testing | MEDIUM - Test across Node versions or configurations |

Quick Reference

Primary Commands

| Task | Command | | ----------------------------------------- | ------------------------------------------------- | | Create worktree (new branch) | gw checkout feat/name | | Create worktree (alias) | gw co feat/name or gw add feat/name | | Create from different branch | gw checkout feat/name --from develop | | Create from staged files (extract WIP) | gw checkout feat/name --from-staged | | Create without auto-navigation | gw checkout feat/name --no-cd | | Skip remote probe (offline mode) | gw checkout feat/name --no-fetch | | Navigate to worktree by name | gw cd feat/name | | Navigate by partial match | gw cd feat (matches first worktree with "feat") | | Navigate to branch (even if in other wt) | gw checkout main | | List all worktrees | gw list | | Check out a PR into a worktree | gw pr 123 | | Check out a PR by URL | gw pr https://github.com/user/repo/pull/123 | | Update with main (merge or rebase) | gw update | | Update from specific branch | gw update --from develop | | Sync auto-copy files to current worktree | gw sync | | Sync specific files | gw sync .env .env.local | | Remove worktree + delete local branch | gw remove feat/name | | Remove worktree but keep branch | gw remove feat/name --preserve-branch | | Batch remove safe (committed, pushed) wts | gw clean | | Preview batch cleanup | gw clean --dry-run | | Full cleanup: worktrees + orphan branches | gw prune | | Get repo root path (worktree-aware) | gw root |

Setup Commands

| Task | Command | | --------------------------------------------- | --------------------------------------------------------------- | | Clone repo and configure gw (interactive) | gw init git@github.com:user/repo.git --interactive | | Init gw in existing repo | gw init --auto-copy-files .env --post-checkout "pnpm install" | | Show current gw config | gw show-init | | Install shell integration (required for cd) | eval "$(gw install-shell)" (add to ~/.zshrc) | | Remove shell integration | gw install-shell --remove |

Proxy Commands (pass-through to git worktree)

| Task | Command | | -------------------- | ---------------------------- | | Lock worktree | gw lock feat/name | | Unlock worktree | gw unlock feat/name | | Repair worktree | gw repair | | Move worktree | gw move feat/name new-path | | Prune stale metadata | gw prune --stale-only |

Key Principles

  • gw checkout is canonical. gw add and gw co are aliases — prefer gw checkout in explanations.
  • One branch per worktree. Same branch cannot be checked out in two worktrees. gw checkout <existing> detects this and navigates instead.
  • Remote probe before treating a branch as new. gw checkout runs git ls-remote (3s timeout) so a teammate's freshly-pushed branch isn't silently forked locally. Use --no-fetch when offline.
  • Auto-copy beats manual copying. Configure autoCopyFiles once in gw init; .env, secrets, etc. land in every new worktree.
  • Post-checkout hooks beat manual installs. Wire pnpm install / equivalent so each worktree is ready immediately.
  • Shell integration is required for cd. Without eval "$(gw install-shell)" in ~/.zshrc, gw cd and auto-nav after gw checkout silently no-op.

Typical Worktree Workflow

# 1. First-time repo setup (one-time per project)
gw init git@github.com:org/repo.git \
  --auto-copy-files .env,.env.local \
  --post-checkout "pnpm install" \
  --interactive

# 2. Start a feature
gw checkout feat/my-feature
# - creates worktree, copies .env, runs pnpm install, auto-navigates

# 3. Work, then update with main
gw update

# 4. Open a PR for review (in another terminal / worktree)
gw pr 456
# - fetches PR branch, creates worktree, copies .env, auto-navigates

# 5. Navigate between worktrees
gw cd feat/my-feature
gw checkout main        # navigates to main worktree (already checked out)

# 6. Extract staged WIP to a new branch
git add src/new-thing.ts
gw checkout feat/extracted --from-staged

# 7. Clean up when done
gw remove feat/my-feature   # removes worktree + local branch
gw clean                    # batch remove safe (committed + pushed) worktrees
gw prune                    # full cleanup: worktrees + orphan branches

Config Reference

Config lives at .gw/config.json (committable) and .gw/config.local.json (gitignored, personal overrides):

{
  "defaultBranch": "main",
  "autoCopyFiles": [".env", ".env.local", "secrets/"],
  "hooks": {
    "checkout": {
      "pre": ["echo 'Creating: {worktree}'"],
      "post": ["pnpm install"],
    },
  },
  "cleanThreshold": 7, // days before worktrees are "stale" for gw clean
  "autoClean": true, // silently prune stale worktrees on gw checkout / gw list
  "updateStrategy": "merge", // "merge" | "rebase"
}

Hook variables: {worktree}, {worktreePath}, {gitRoot}, {branch}.

Related Skills

Resources