worktree에서 Claude 시작
--worktree 또는 -w를 전달하여 격리된 worktree를 생성하고 Claude를 시작합니다. 기본적으로 worktree는 저장소 루트의 .claude/worktrees/<value>/ 아래에 생성되며, worktree-<value>라는 새 브랜치에 생성됩니다:
WorktreeCreate 훅을 구성하세요. 다른 터미널에서 다른 이름으로 명령을 다시 실행하여 두 번째 격리된 세션을 시작합니다:
bright-running-fox와 같은 이름을 생성합니다:
EnterWorktree 도구로 하나를 생성합니다. worktree에 들어가면 Claude는 .claude/worktrees/ 아래의 다른 worktree로 EnterWorktree를 호출하여 직접 전환할 수 있습니다. 이전 worktree는 디스크에 그대로 남아 있습니다.
저장소의 .claude/worktrees/ 디렉터리 외부의 경로에 들어가면 먼저 승인을 요청합니다. 왜냐하면 세션의 작업 디렉터리, 쓰기 액세스 및 CLAUDE.md 및 설정과 같은 프로젝트 구성을 해당 위치로 이동하기 때문입니다. EnterWorktree 권한 규칙 또는 “다시 묻지 않기”를 선택해도 이 프롬프트를 억제하지 않습니다. bypassPermissions 모드만 이를 건너뜁니다. v2.1.206 이전에는 Claude가 승인을 요청하지 않고 기존 worktree 경로에 들어갈 수 있었습니다.
v2.1.198부터 worktree에 들어가거나 나갈 때 세션 트랜스크립트도 해당 디렉터리의 프로젝트 저장소로 재배치되며, /cd와 동일한 방식으로 작동하므로 /desktop과 --resume이 이후에 해당 위치에서 세션을 찾습니다. WorktreeCreate 훅으로 생성된 Worktree는 제외되며 트랜스크립트를 시작 디렉터리에 유지합니다.
Worktree는 샌드박싱이 활성화된 상태에서 작동합니다. 샌드박스는 메인 저장소의 공유 .git 디렉터리에 대한 쓰기를 허용하므로 git commit과 같은 명령이 연결된 worktree 내부에서 refs 및 인덱스를 업데이트할 수 있습니다.
처음으로 디렉터리에서 --worktree를 사용하기 전에 해당 디렉터리에서 claude를 한 번 실행하여 작업 공간 신뢰 대화를 수락합니다. 신뢰가 아직 수락되지 않았으면 --worktree는 오류와 함께 종료되고 먼저 디렉터리에서 claude를 실행하도록 요청합니다. -p를 사용한 비대화형 실행은 신뢰 확인을 건너뛰므로 claude -p --worktree는 이를 수행하지 않고 진행됩니다.
Claude Code가 시작 시 worktree 디렉터리에 들어갈 수 없는 경우, 예를 들어 WorktreeCreate 훅이 생성한 디렉터리 이외의 다른 것을 출력했거나 설정 후 디렉터리가 삭제된 경우, Claude Code는 경로를 명시하는 오류를 출력하고 코드 1로 종료됩니다. v2.1.205 이전에는 이로 인해 세션이 충돌했으며, -p를 사용하면 약 30초 동안 정지한 후 코드 0으로 종료되었습니다.
프로젝트 범위에서 메인 체크아웃에서 설치된 플러그인도 동일한 저장소의 worktree에 로드되므로 worktree마다 다시 설치할 필요가 없습니다. 이는 --worktree 또는 git worktree add로 worktree를 생성하든 적용됩니다. Claude Code v2.1.200 이상이 필요합니다.
기본 브랜치 선택
Worktree는 저장소의 기본 브랜치인origin/HEAD에서 분기되므로 원격과 일치하는 깨끗한 트리에서 시작합니다. 지난 24시간 동안 저장소를 페치한 것이 없으면 Claude Code는 기본 브랜치의 페치로 origin/HEAD를 새로 고치며, 5초로 제한되고 페치가 실패하면 로컬로 캐시된 ref를 사용합니다. 원격이 구성되지 않았거나 origin/HEAD가 로컬로 캐시되지 않았고 페치할 수 없으면 worktree는 현재 로컬 HEAD로 폴백합니다.
새로 고침에는 Claude Code v2.1.208 이상이 필요합니다. 그 이전에는 새로운 worktree가 이미 로컬로 캐시된 origin/HEAD를 사용했습니다.
대신 항상 로컬 HEAD에서 분기하려면 설정에서 worktree.baseRef를 "head"로 설정합니다. baseRef를 "head"로 설정하면 새 worktree가 푸시되지 않은 커밋과 기능 브랜치 상태를 유지하므로, 진행 중인 작업에서 작동해야 하는 서브에이전트를 격리할 때 유용합니다. 세션이 연결된 worktree 내부에서 실행 중일 때 "head"는 메인 체크아웃의 HEAD가 아닌 해당 worktree의 HEAD로 확인됩니다. 설정은 "fresh" 또는 "head"만 허용하며, 임의의 git ref는 허용하지 않습니다:
#이 앞에 붙은 PR 번호 또는 전체 GitHub 풀 요청 URL을 전달합니다. Claude Code는 origin에서 pull/<number>/head를 페치하고 .claude/worktrees/pr-<number>에서 worktree를 생성합니다:
WorktreeCreate 훅을 구성하여 기본 git worktree 로직을 완전히 대체합니다.
worktree 이름 재사용
디렉터리가 이미 존재하는 worktree 이름을 재사용하면 해당 worktree를 재개합니다. 재개된 worktree는 다음 모든 조건이 충족될 때 이전 팁에서 재개하는 대신 현재 기본으로 재설정됩니다:- 커밋되지 않은 변경 사항이나 추적되지 않은 파일이 없습니다.
- 여전히 Claude Code가 생성한 브랜치에 있습니다.
- 커밋하지 않았거나 풀 요청이 병합되고 원격 브랜치가 삭제되었습니다.
gitignored 파일을 worktree로 복사
Worktree는 새로운 체크아웃이므로 메인 저장소의.env 또는 .env.local과 같은 추적되지 않은 파일이 없습니다. Claude가 worktree를 생성할 때 자동으로 복사하려면 프로젝트 루트에 .worktreeinclude 파일을 추가합니다.
파일은 .gitignore 구문을 사용합니다. 패턴과 일치하고 gitignored된 파일만 복사되므로 추적된 파일은 절대 중복되지 않습니다.
이 .worktreeinclude는 두 개의 env 파일과 시크릿 구성을 각 새 worktree로 복사합니다:
.worktreeinclude
--worktree로 생성된 worktree, 서브에이전트 worktree 및 데스크톱 앱의 병렬 세션에 적용됩니다.
worktree로 서브에이전트 격리
서브에이전트는 자체 worktree에서 실행될 수 있으므로 병렬 편집이 충돌하지 않습니다. Claude에게 “에이전트에 worktree 사용”을 요청하거나, 사용자 정의 서브에이전트에서 frontmatter에isolation: worktree를 추가하여 영구적으로 설정합니다. 각 서브에이전트는 서브에이전트가 변경 없이 완료되면 자동으로 제거되는 임시 worktree를 가져옵니다.
서브에이전트 worktree는 --worktree와 동일한 기본 분기를 사용하므로, worktree.baseRef가 "head"로 설정되지 않은 한 저장소의 기본 분기에서 분기합니다.
worktree 정리
worktree 세션을 종료할 때 정리는 변경 사항을 만들었는지 여부에 따라 달라집니다:- 커밋되지 않은 변경 사항 없음, 추적되지 않은 파일 없음, 새로운 커밋 없음: worktree와 해당 브랜치가 자동으로 제거됩니다. 세션에 이름이 있으면 Claude는 대신 프롬프트를 표시하여 나중을 위해 worktree를 유지할 수 있습니다
- 커밋되지 않은 변경 사항, 추적되지 않은 파일 또는 새로운 커밋 존재: Claude는 worktree를 유지하거나 제거할지 묻습니다. 유지하면 디렉토리와 브랜치가 보존되어 나중에 돌아올 수 있습니다. 제거하면 worktree 디렉토리와 해당 브랜치가 삭제되어 커밋되지 않은 모든 변경 사항, 추적되지 않은 파일 및 커밋이 버려집니다
- 비대화형 실행:
--worktree와 함께-p로 생성된 worktree는 종료 프롬프트가 없으므로 자동으로 정리되지 않습니다.git worktree remove로 제거합니다
cleanupPeriodDays 설정보다 오래되면 자동으로 제거되며, 커밋되지 않은 변경 사항, 추적되지 않은 파일 및 푸시되지 않은 커밋이 없는 경우입니다. --worktree로 생성한 worktree는 이 스윕으로 절대 제거되지 않습니다.
에이전트가 실행 중인 동안 Claude는 해당 worktree에서 git worktree lock을 실행하여 동시 정리가 이를 제거할 수 없도록 합니다. 에이전트가 완료되면 잠금이 해제됩니다. 스윕이 유지하는 worktree를 정리하려면 git worktree remove를 실행하고, worktree에 커밋되지 않은 변경 사항이나 추적되지 않은 파일이 있으면 --force를 추가합니다.
Windows에서 worktree를 제거하기 전에 Claude Code는 링크 항목으로서 그 안의 모든 깊이에 있는 NTFS 접합점 또는 디렉토리 심볼릭 링크를 제거하므로 worktree를 제거해도 링크가 가리키는 파일이 삭제되지 않습니다. v2.1.205 이전에는 Claude Code가 최상위 링크만 링크 항목으로 제거했으며, 서브디렉토리에 중첩된 접합점이 있는 worktree를 제거하면 worktree 외부의 링크가 가리키는 디렉토리의 내용이 삭제될 수 있었습니다.
worktree 수동 관리
worktree 위치 및 브랜치 구성을 완전히 제어하려면 Git으로 직접 worktree를 생성합니다. 이는 특정 기존 브랜치를 체크아웃하거나 worktree를 저장소 외부에 배치해야 할 때 유용합니다. 새 브랜치에서 worktree 생성:비git 버전 관리
Worktree 격리는 기본적으로 git을 사용합니다. SVN, Perforce, Mercurial 또는 기타 시스템의 경우WorktreeCreate 및 WorktreeRemove 훅을 구성하여 사용자 정의 생성 및 정리 로직을 제공합니다. 훅이 기본 git 동작을 대체하므로 --worktree를 사용할 때 .worktreeinclude가 처리되지 않습니다. 훅 스크립트 내에서 대신 로컬 구성 파일을 복사합니다.
이 WorktreeCreate 훅은 stdin에서 worktree 이름을 읽고, 새로운 SVN 작업 복사본을 체크아웃하고, Claude Code가 세션의 작업 디렉토리로 사용할 수 있도록 디렉토리 경로를 인쇄합니다:
WorktreeRemove 훅과 쌍을 이룹니다. 입력 스키마 및 제거 예제는 훅 참조를 참조하세요.
참고 항목
Worktree는 파일 격리를 처리합니다. 아래의 관련 페이지는 이러한 격리된 체크아웃으로 작업을 위임하고 생성한 세션 간에 전환하는 것을 다룹니다:- 서브에이전트: 세션 내의 격리된 에이전트에 작업 위임
- 에이전트 팀: 여러 Claude 세션을 자동으로 조정
- 세션 관리: 대화 이름 지정, 재개 및 전환
- 데스크톱 병렬 세션: 데스크톱 앱의 worktree 기반 세션