Git WorkTree 톺아보기

KangWook·2026년 5월 20일

git worktree 써보니까 진짜 편하더라

요즘 일하다가 이런 경험 한 번쯤 있지 않아요?

작업하던 브랜치에서 한참 코드 짜고 있는데, 갑자기 슬랙으로 "급한데 hotfix 좀 봐주세요~" 핑이 옵니다. 한숨 푹 쉬고 git stas h 한 번 때리고, 브랜치 바꾸고, 다시 돌아와서 stash pop 하고... 근데 또 까먹고 stash 했다는 사실 자체를 잊어버려서 며칠 뒤
에 "어 이거 뭐야?" 하면서 발견하기도 하고요.

저도 이게 너무 짜증나서 다른 방법 없나 찾다가 git worktree라는 걸 알게 됐는데, 진짜 이거 모르고 살았던 게 억울할 정도였어
요. 그래서 오늘은 이거 한번 풀어보려고 합니다.

git worktree가 뭔데?

쉽게 말하면 하나의 git 저장소를 여러 폴더에서 동시에 체크아웃할 수 있게 해주는 기능이에요.

기존엔 어떻게 했냐면, 같은 프로젝트인데 두 브랜치를 동시에 열어두고 싶으면 git clone을 두 번 떠야 했잖아요. 그러면 디스크
용량도 두 배로 먹고, remote 설정도 따로 해야 하고, 뭔가 자원 낭비 같은 느낌이 들죠.

worktree는 그게 아니라 같은 .git 저장소를 공유하면서 폴더만 여러 개 만들어주는 거예요. 그래서 브랜치 A는 ~/project
더에서 작업하고, 브랜치 B는 ~/project-hotfix 폴더에서 동시에 띄워놓고 작업할 수 있어요.

일단 써보자

명령어는 생각보다 단순해요.

# 새 worktree 만들기 (브랜치도 같이 생성)
git worktree add ../my-hotfix -b hotfix/urgent-bug

# 이미 있는 브랜치로 worktree 만들기
git worktree add ../review-branch feature/teammate-pr

# 현재 worktree 목록 보기
git worktree list

# 다 쓴 worktree 정리
git worktree remove ../my-hotfix

요거 처음 쳐보면 옆에 디렉토리 하나가 뿅 생기는데, 들어가보면 그냥 평범한 git 저장소처럼 보여요. 근데 .git이 폴더가 아니
라 파일이고 안에는 원본 저장소 가리키는 경로만 들어있죠. 신기하더라구요.

어떨 때 좋냐면

1. 갑작스러운 hotfix 들어왔을 때

작업 중인 브랜치 stash 안 하고 그냥 새 worktree 파서 거기서 hotfix 처리하면 돼요. 끝나면 worktree 지우고 원래 폴더로 돌아오
면 끝. 컨텍스트 스위칭 비용이 거의 0에 가까워져요.

2. 코드 리뷰할 때

동료가 PR 올렸는데 직접 받아서 돌려보고 싶을 때 있잖아요. 근데 내 작업 브랜치 망가뜨리기 싫고. 이럴 때 worktree 하나 파서
거기서 체크아웃하면 IDE도 따로 띄워놓고 비교하면서 볼 수 있어요. 저는 이거 알고 나서 리뷰 퀄리티가 확 올라갔어요.

3. long-running 빌드/테스트 돌릴 때

CI 안 돌리고 로컬에서 무거운 빌드 한 번 돌리고 싶을 때, 그동안 다른 작업 못 하잖아요. worktree에서 빌드 돌려놓고 메인 폴더
에서는 계속 다른 작업하면 됩니다. 진짜 이게 제일 효자에요.

4. 두 버전 동시에 비교할 때

마이그레이션 작업하거나 큰 리팩토링할 때, "이전 버전이랑 새 버전 사이드 바이 사이드로 보고 싶다" 싶을 때가 있죠. clone 두
번 뜨지 말고 worktree 쓰면 깔끔해요.

알아두면 좋은 것들

같은 브랜치는 두 worktree에 못 열어요. 이건 처음에 좀 헷갈렸는데, 생각해보면 당연한 거예요. 같은 브랜치를 두 군데서 동
시에 커밋하면 어떻게 되겠어요. 그래서 한 브랜치는 한 worktree에만 있을 수 있다는 룰이 있어요.

.gitignore에 안 잡힌 파일들은 따로따로에요. node_modules나 빌드 결과물 같은 거는 worktree마다 새로 설치/빌드해야 합니
다. 디스크는 좀 먹어요. 근데 이게 오히려 좋은 게, 메인 폴더 환경 안 더럽히면서 실험할 수 있다는 거죠.

worktree 그냥 폴더만 지우면 안 돼요. rm -rf로 폴더 지우면 git 입장에선 worktree가 아직 살아있다고 생각해서 git workt ree list에 계속 나옵니다. 꼭 git worktree remove 쓰거나, 이미 지웠으면 git worktree prune으로 정리해줘야 해요.

경로는 상대경로로 자주 쓰는데, 형제 디렉토리로 두는 게 깔끔해요.

~/projects/
├── my-app/              ← 메인
├── my-app-hotfix/       ← worktree 1
└── my-app-review/       ← worktree 2

이런 식으로요. 안에다 중첩으로 만들면 IDE가 뻘짓할 때도 있어서 조심해야 해요.

별칭 만들어두면 더 편함

매번 git worktree add ../어쩌고 -b 저쩌고 치기 귀찮으니까 저는 그냥 별칭 만들어 썼어요.

# ~/.zshrc 같은 데에
alias gwt='git worktree'
alias gwta='git worktree add'
alias gwtl='git worktree list'
alias gwtr='git worktree remove'

이러면 gwta ../hotfix -b hotfix/xxx 이 정도로 끝나요. 훨씬 부담 없죠.

마무리

git stash 한 100번 정도 쓰면서 살았던 옛날의 저를 좀 안아주고 싶어요. worktree 알고 나니까 브랜치 전환에 대한 심리적 부담
이 진짜 확 줄었거든요.

특히 모노레포 같이 빌드가 무거운 프로젝트에서는 거의 필수템 같아요. 한 번 익숙해지면 못 돌아가요 진짜.

이 글이 누군가의 stash 지옥 탈출에 도움이 됐으면 좋겠습니다.

profile
꾸준히 성장하는 개발자

0개의 댓글