Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Git이 브랜치가 다른 worktree에서 체크아웃됐다고 하나요? prune이나 강제 전에 소유자를 증명하세요

모든 연결 worktree를 나열하고 미커밋·미push 작업을 보존한 뒤 실제, 이동, 오프라인, 누락을 구분해 remove, repair, prune, detach 또는 새 브랜치를 선택하세요.

Git worktree 소유자 원장 원본 그림.
Watch at Ease 원본 일러스트: 등록 브랜치 소유자를 나열하고 검사해 분류합니다. Watch at Ease

Git은 두 디렉터리가 같은 branch ref를 움직이지 않도록 한 브랜치의 다중 worktree checkout을 막습니다. 오류 경로는 등록 소유자 증거이지 삭제 허가가 아닙니다.

porcelain 목록과 해당 디렉터리 검사부터 시작하세요. prune은 누락 경로, repair는 이동 링크, remove는 의도적으로 종료하는 worktree에 씁니다.

1. 등록 소유자 목록화

건강한 worktree에서 git worktree list --porcelain을 실행해 경로, HEAD, 브랜치, 잠금 이유와 prunable 표시를 기록하세요. .git/worktrees를 건드리기 전에 오류 경로를 확인합니다.

실패한 명령과 wrapper가 원격 작업을 완료했는지도 기록하세요. PR은 merge됐지만 로컬 정리만 branch guard에서 실패할 수 있습니다.

2. 지정 경로와 작업 검사

디렉터리가 있으면 status와 base/remote에 없는 커밋을 검사합니다. 제거 전에 patch, untracked 파일과 커밋 ID를 보존하세요.

temp, agent, build라는 이름으로 안전을 추정하지 마세요. 잠긴 오래된 경로에도 미공개 작업이 있거나 일시 오프라인일 수 있습니다.

3. 실제·이동·오프라인·누락 분류

실제 소유자가 그 브랜치를 움직일 장소입니다. 외부 이동은 repair, 이동식·네트워크 경로는 의도적으로 잠겼고 일시 부재일 수 있습니다.

마운트 해제, 이름 변경, namespace 접근 실패가 아닌 실제 누락을 증명한 뒤 git worktree prune --dry-run --verbose로 미리 확인하세요.

4. 맞는 조치만 실행

더 이상 필요 없는 clean tree는 git worktree remove path, 지원 이동은 move, 외부 이동 뒤에는 repair를 씁니다.

병렬 읽기에는 detached HEAD 또는 새 브랜치를 써 같은 소유자를 우회하지 마세요. force는 버릴 dirty/locked 상태를 확인한 뒤에만 사용합니다.

5. 단일 소유자와 결과 검증

porcelain 목록을 다시 실행해 브랜치가 의도한 소유자 한 곳에만 있는지 확인하세요. 이미 성공한 원격 merge/push가 아니라 실패한 로컬 단계만 재시도합니다.

남은 tree에서 status와 커밋 도달성을 검사합니다. 승인 기록에는 소유 경로, branch ref, 보존 커밋과 metadata·directory·wrapper 중 바뀐 상태를 남기세요.

실제·이동·누락 worktree 조치를 구분한 원본 그림.
Watch at Ease 원본 일러스트: remove, repair와 prune은 서로 다른 상태를 해결합니다. Watch at Ease