Stash 지옥에서 벗어나기: Git Worktree를 써야 하는 이유와 실무 활용법
발행일: 2026년 10월 11일
들어가며
기능 브랜치(feature)에서 컴포넌트 구조를 한창 갈아엎던 중, 운영 서버에 긴급 핫픽스(hotfix) 요청이 날아오는 순간을 떠올려보자. 대부분의 개발자는 습관처럼 아래 명령어를 입력한다.
git stash
git switch main
# 핫픽스 수정, 테스트, 커밋, 푸시...
git switch feature
git stash pop # 그리고 터지는 컴파일 에러 혹은 컨플릭트
이 과정에서 로컬 의존성 패키지(node_modules 등)가 꼬이거나, 빌드 캐시가 날아가 재빌드를 기다리며 집중 흐름(Context)이 완전히 깨진다.
이 문제를 깔끔하게 해결하는 Git의 내장 기능이 바로 Git Worktree 다.
1. Git Worktree란?
일반적인 Git 프로젝트는 하나의 작업 디렉토리(Working Directory)에 하나의 브랜치만 체크아웃해 사용한다. 다른 브랜치를 보려면 작업 폴더 내부의 파일을 교체(switch/checkout)해야 한다.
반면, Git Worktree는 하나의 Git 저장소(.git)를 공유하면서 여러 개의 디렉토리에 서로 다른 브랜치를 동시에 체크아웃하는 기능 이다.
기존 방식: 책상 하나에서 '기능 개발 서류'를 치워 서랍에 넣고(stash), '핫픽스 서류'를 꺼내 작업.
Worktree 방식: 같은 서랍장(.git)을 공유하는 책상 여러 개 를 방에 두고, 1번 책상에는 기능 개발을 둔 채 2번 책상으로 건너가 핫픽스를 처리.
새로 생성된 디렉토리에는 무거운 .git 폴더가 복제되는 것이 아니라, 원본 .git 저장소를 가리키는 가벼운 메타데이터 포인터 텍스트 파일만 생성된다.
2. Git Worktree를 써야 하는 결정적 이유 (장점)
① 컨텍스트 스위칭 비용 '제로' (Stash 불필요)
미완성 커밋이나 더러운 워킹 트리(Dirty working tree)를 억지로 정리할 필요가 없다. 터미널 탭이나 IDE 창을 하나 더 열어 폴더만 이동하면 즉시 다른 브랜치 환경이 준비된다.
② 빌드 캐시 및 의존성 격리
브랜치마다 라이브러리 버전이 다르거나 대규모 모노레포를 다룰 때, 브랜치를 오갈 때마다 재빌드(rebuild)하거나 npm install을 다시 실행할 필요가 없다. 각 폴더마다 빌드 아티팩트가 온전히 보존된다.
③ git clone 대비 압도적인 디스크 & 네트워크 절약
"그냥 폴더 따로 두고 레포를 하나 더 clone 하면 안 되나?"라는 의문이 들 수 있다. 하지만 clone 방식은 수백 MB~수 GB에 달하는 커밋 히스토리와 Git 오브젝트를 디스크에 중복 저장하며, 매번 fetch/push를 거쳐야 로컬 동기화가 된다. Worktree는 로컬 Git 오브젝트를 즉시 공유하므로 디스크 낭비가 없고 커밋이 즉시 반영된다.
④ AI 코딩 에이전트와의 병렬 협업 환경
최근에는 Claude Code, Cursor, Aider 등 AI 에이전트에게 리팩터링이나 테스트 코드 작성을 백그라운드로 맡기는 워크플로가 많다. Worktree를 활용하면 메인 작업 폴더를 오염시키지 않고, 별도 디렉토리에서 AI가 브랜치를 분석·실험하도록 격리할 수 있다.
3. 한눈에 보는 비교: Clone vs Switch vs Worktree
구분
git checkout / switch
새 폴더에 git clone
git worktree
저장소(.git)
1개 (단일 작업 공간)
중복 생성 (용량 2배)
1개 공유 (포인터 연결)
동시 다중 브랜치
불가능 (스위칭 필요)
가능
가능 (독립 디렉토리)
디스크 효율성
높음
매우 낮음
매우 높음 (작업 파일만 점유)
로컬 커밋 공유
즉시 반영
원격 push/fetch 필요
즉시 반영 (원격 통신 불필요)
빌드/의존성 보존
브랜치 전환 시 깨짐
보존됨
보존됨
4. 실전 5분 가이드: 핵심 명령어 모음
새 워크트리 생성 (add)
작업 중인 프로젝트 상위 또는 하위 폴더에 새 디렉토리를 지정해 브랜치를 연결한다.
# 문법: git worktree add <폴더경로> <브랜치명>
git worktree add ../my-project-hotfix main
# 새 브랜치를 생성하면서 워크트리를 띄우는 경우 (-b 옵션)
git worktree add -b fix/auth-bug ../my-project-auth main
병렬 작업 및 검증
새 터미널 창을 열거나 VS Code 등의 에디터에서 해당 디렉토리를 열고 작업한다.
cd ../my-project-hotfix
# 코드 수정, 테스트, 커밋, 푸시 진행
git commit -am "fix: 긴급 결제 오류 수정"
git push origin main
워크트리 목록 확인 (list)
어떤 브랜치가 어느 경로에 열려 있는지 한눈에 확인할 수 있다.
git worktree list
작업 완료 후 워크트리 삭제 (remove)
작업이 끝났다면 해당 폴더 밖으로 나온 뒤 워크트리를 깔끔하게 정리한다.
cd ../my-project
git worktree remove ../my-project-hotfix
(수동으로 폴더를 지웠다면 git worktree prune을 실행해 연결 정보를 정리하면 된다.)
결론
브랜치를 전환할 때마다 반복하던 stash와 pop, 빌드 캐시 초기화는 개발 생산성을 갉아먹는 대표적인 병목이다. 단 하나의 명령어로 작업 흐름을 끊지 않고 멀티태스킹을 지원하는 Git Worktree를 실무에 도입해 보는 것을 권장한다.
© 2026. All rights reserved.