프로필 로고
2026-04-03

git worktree

stash와 switch를 반복하던 브랜치 전환의 번거로움을 해결하기 위해 등장한 git worktree의 개념, add·list·remove·prune 명령어 사용법, 그리고 동일 브랜치 중복 체크아웃 제약 같은 운영 시 주의할 점을 정리한다.

  • Git

개요

  1. 개발하다 보면 현재 작업을 멈추고 다른 브랜치로 급하게 이동해야 할 때가 생긴다.

  2. 예를 들어 feature 브랜치에서 작업 중에 긴급 버그 수정 요청이 들어오는 상황이라면 작업 중인 내용을 git stash로 임시 저장하고 브랜치를 바꿔야 했다.

    my-project/ 브랜치 하나만 체크아웃 가능
    ├── .git/
    ├── src/
    └── ...
    
       지금 feature/login 작업 중...
       hotfix 하려면? stash switch 작업 switch back stash pop
  3. 작업이 복잡할수록 stashswitch를 반복하는 과정이 번거롭고 실수를 유발하기 쉽다.

  4. Git은 이 문제를 해결하기 위해 워크트리 기능을 도입했다.

  5. 워크트리는 하나의 Git 저장소에 여러 개의 작업 디렉토리를 동시에 연결하는 기능이다.

  6. 보통 하나의 저장소는 하나의 작업 폴더를 가지는데, 워크트리는 이 제한을 없애준다.

  7. 각 워크트리는 서로 다른 브랜치를 독립적으로 체크아웃한 상태로 유지된다.

  8. stash 없이 두 브랜치를 동시에 열어두고 각자 작업할 수 있다는 뜻이다.

  9. 내부적으로는 .git 폴더를 공유하기 때문에 커밋 히스토리와 객체는 하나로 통합되어 있다.

주요 명령어

  1. git worktree add <경로> <브랜치>로 새 워크트리를 원하는 위치에 생성한다.

    git worktree add ../my-project-hotfix hotfix
  2. 이 명령은 ../hotfix 폴더를 만들고, 그 안에 hotfix 브랜치를 체크아웃한 상태로 세팅한다.

    📁 my-project/ feature/login 브랜치 (작업 )
    ├── .git/ 폴더가 .git을 공유함
    ├── src/
    └── ...
     
    📁 my-project-hotfix/ hotfix 브랜치 (동시에 열려 있음)
    ├── .git (참조만 있음)     ← 실제 .git은 위쪽 것을 가리킴
    ├── src/
    └── ...
  3. 이후 터미널에서 그 폴더로 이동하면 완전히 독립된 작업 환경이 준비되어 있다.

    커밋 히스토리 (공유됨)
    ──●──●──●──◀ main
                 └──●── feature/login  (my-project/ 에서 작업)
                 └──●── hotfix         (my-project-hotfix/ 에서 작업)
  4. git worktree list를 실행하면 현재 연결된 모든 워크트리의 경로와 브랜치를 확인할 수 있다.

  5. 작업이 끝난 워크트리는 git worktree remove <경로>로 제거한다.

  6. 워크트리 폴더를 그냥 삭제했다면 git worktree prune으로 끊어진 참조를 정리한다.

알아둘 점

  1. 하나의 브랜치는 동시에 두 워크트리에서 체크아웃할 수 없다.
  2. 같은 브랜치를 두 곳에서 동시에 수정하면 충돌을 피할 수 없기 때문에 Git이 이를 막는다.
  3. 메인 워크트리(처음 clone한 폴더)는 삭제할 수 없고, 추가로 만든 것만 제거 가능하다.
  4. 워크트리는 같은 .git을 공유하므로 한쪽에서 커밋하면 다른 쪽에서도 즉시 보인다.
  5. IDE를 여러 창으로 열어 각 워크트리 폴더를 따로 띄워두면 실질적으로 브랜치 두 개를 병렬로 작업하는 환경이 만들어진다.