# Create Worktree

> Create or reuse a git worktree for a pull request or branch so reviews and work happen in isolation

- Skill: `majiayu000/create-worktree-4` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/create-worktree-4`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/create-worktree-4/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/create-worktree-4

---


# Git Worktree

Set up an isolated git worktree.

Parse `$ARGUMENTS` to extract:
- The worktree name (required) — used as the directory name under `.worktrees/`
- `--pr <number>` (optional) — checkout a GitHub PR into the worktree using `gh pr checkout`
- `--branch <ref>` (optional) — create the worktree from a specific branch or ref

## Steps

### 1. Determine worktree path

The worktree path is: `<repo-root>/.worktrees/<name>`

For example, if the repo root is `/home/user/src/dlt` and the name is `review-pr-3584`, the worktree path is `/home/user/src/dlt/.worktrees/review-pr-3584`.

Create the `.worktrees` directory if it does not exist:

```
mkdir -p <repo-root>/.worktrees
```

### 2. Create or reuse the worktree

Check if a worktree already exists at that path:

```
git worktree list
```

- **If a worktree already exists** at the target path, reuse it.
  - If `--pr` was given, run `cd <worktree-path> && gh pr checkout <number>` to make sure it is up to date.
  - If `--branch` was given, run `git -C <worktree-path> checkout <ref>`.
- **If no worktree exists** at the target path, create one:
  - If `--pr` was given, first resolve the PR's branch name: `gh pr view <number> --json headRefName -q .headRefName`
  - If `--pr` or `--branch` was given, check `git worktree list` output for any **other** worktree that already has the same branch checked out. If found:
    - Use `AskUserQuestion` to ask the user: "Branch `<branch>` is already checked out in worktree `<existing-path>`. Use that worktree instead?"
    - If the user says yes, use the existing worktree path (skip creation, proceed to step 3 with the existing path).
    - If the user says no, **STOP** — do not create a new worktree. Print a message explaining that the branch is already checked out elsewhere and exit.
  - If no conflict, create the worktree:
    - If `--branch` was given: `git worktree add .worktrees/<name> <ref>`
    - Otherwise: `git worktree add .worktrees/<name> --detach`
    - If `--pr` was given, then also: `cd <worktree-path> && gh pr checkout <number>`
- `gh pr checkout` handles fetching, fork tracking, and branch setup automatically.

### 3. Switch cwd

```
cd <worktree-path>
```

Then verify the switch took effect:

```
pwd
```

If `pwd` does not show the worktree path, stop with an error — the cwd did not persist.

### 4. Report

```
Worktree ready: <worktree-path>
```

