Create Worktrees
$ npx claude-code-templates@latest --command="git-workflow/create-worktrees" --yesRequires Claude Code. The command adds this command to your project's .claudedirectory — nothing runs on ToolZip's servers.
What's inside this command
Component source
Git Worktree Commands
Create Worktrees for All Open PRs
This command fetches all open pull requests using GitHub CLI, then creates a git worktree for each PR's branch in the ./tree/<BRANCH_NAME> directory.
# Ensure GitHub CLI is installed and authenticated
gh auth status || (echo "Please run 'gh auth login' first" && exit 1)
# Create the tree directory if it doesn't exist
mkdir -p ./tree
# List all open PRs and create worktrees for each branch
gh pr list --json headRefName --jq '.[].headRefName' | while read branch; do
# Handle branch names with slashes (like "feature/foo")
branch_path="./tree/${branch}"
# For branches with slashes, create the directory structure
if [[ "$branch" == */* ]]; then
dir_path=$(dirname "$branch_path")
mkdir -p "$dir_path"
fi
# Check if worktree already exists
if [ ! -d "$branch_path" ]; then
echo "Creating worktree for $branch"
git worktree add "$branch_path" "$branch"
else
echo "Worktree for $branch already exists"
fi
done
# Display all created worktrees
echo "\nWorktree list:"
git worktree list
Example Output
Creating worktree for fix-bug-123
HEAD is now at a1b2c3d Fix bug 123
Creating worktree for feature/new-feature
HEAD is now at e4f5g6h Add new feature
Worktree for documentation-update already exists
Worktree list:
/path/to/repo abc1234 [main]
/path/to/repo/tree/fix-bug-123 a1b2c3d [fix-bug-123]
/path/to/repo/tree/feature/new-feature e4f5g6h [feature/new-feature]
/path/to/repo/tree/documentation-update d5e6f7g [documentation-update]
Cleanup Stale Worktrees (Optional)
You can add this to remove stale worktrees for branches that no longer exist:
# Get current branches
current_branches=$(git branch -a | grep -v HEAD | grep -v main | sed 's/^[ *]*//' | sed 's|remotes/origin/||' | sort | uniq)
# Get existing worktrees (excluding main worktree)
worktree_paths=$(git worktree list | tail -n +2 | awk '{print $1}')
for path in $worktree_paths; do
# Extract branch name from path
branch_name=$(basename "$path")
# Skip special cases
if [[ "$branch_name" == "main" ]]; then
continue
fi
# Check if branch still exists
if ! echo "$current_branches" | grep -q "^$branch_name$"; then
echo "Removing stale worktree for deleted branch: $branch_name"
git worktree remove --force "$path"
fi
done
Create New Branch and Worktree
This interactive command creates a new git branch and sets up a worktree for it:
#!/bin/bash
# Ensure we're in a git repository
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
echo "Error: Not in a git repository"
exit 1
fi
# Get the repository root
repo_root=$(git rev-parse --show-toplevel)
# Prompt for branch name
read -p "Enter new branch name: " branch_name
# Validate branch name (basic validation)
if [[ -z "$branch_name" ]]; then
echo "Error: Branch name cannot be empty"
exit 1
fi
if git show-ref --verify --quiet "refs/heads/$branch_name"; then
echo "Warning: Branch '$branch_name' already exists"
read -p "Do you want to use the existing branch? (y/n): " use_existing
if [[ "$use_existing" != "y" ]]; then
exit 1
fi
fi
# Create branch directory
branch_path="$repo_root/tree/$branch_name"
# Handle branch names with slashes (like "feature/foo")
if [[ "$branch_name" == */* ]]; then
dir_path=$(dirname "$branch_path")
mkdir -p "$dir_path"
fi
# Make sure parent directory exists
mkdir -p "$(dirname "$branch_path")"
# Check if a worktree already exists
if [ -d "$branch_path" ]; then
echo "Error: Worktree directory already exists: $branch_path"
exit 1
fi
# Create branch and worktree
if git show-ref --verify --quiet "refs/heads/$branch_name"; then
# Branch exists, create worktree
echo "Creating worktree for existing branch '$branch_name'..."
git worktree add "$branch_path" "$branch_name"
else
# Create new branch and worktree
echo "Creating new branch '$branch_name' and worktree..."
git worktree add -b "$branch_name" "$branch_path"
fi
echo "Success! New worktree created at: $branch_path"
echo "To start working on this branch, run: cd $branch_path"
Example Usage
$ ./create-branch-worktree.sh
Enter new branch name: feature/user-authentication
Creating new branch 'feature/user-authentication' and worktree...
Preparing worktree (creating new branch 'feature/user-authentication')
HEAD is now at abc1234 Previous commit message
Success! New worktree created at: /path/to/repo/tree/feature/user-authentication
To start working on this branch, run: cd /path/to/repo/tree/feature/user-authentication
Creating a New Branch from a Different Base
If you want to start your branch from a different base (not the current HEAD), you can modify the script:
read -p "Enter new branch name: " branch_name
read -p "Enter base branch/commit (default: HEAD): " base_commit
base_commit=${base_commit:-HEAD}
# Then use the specified base when creating the worktree
git worktree add -b "$branch_name" "$branch_path" "$base_commit"
This will allow you to specify any commit, tag, or branch name as the starting point for your new branch.
Related Claude Code Commands
Commit
Create well-formatted commits with conventional commit format and emoji
Create Pr
A ready-to-install Claude Code component.
Pr Review
A ready-to-install Claude Code component.
Fix Github Issue
A ready-to-install Claude Code component.
Create Pull Request
A ready-to-install Claude Code component.
Branch Cleanup
Use PROACTIVELY to clean up merged branches, stale remotes, and organize branch structure
Catalog data and component content are sourced from the open-source davila7/claude-code-templates project (MIT license). ToolZip curates the listing and writes original descriptions; every component links back to its original source. Claude Code is a product of Anthropic. ToolZip is an independent catalog and is not affiliated with or endorsed by Anthropic.