Git Worktree๋ฅผ ํ์ฉํ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ ๊ฐ์
stash ์์ด, ์ถฉ๋ ์์ด — ์ฌ๋ฌ ์์ ์ ๋์์ ์งํํ๋ ๋ฐฉ๋ฒ
๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ ๋ ํ์ด๋ฐ์ด ๋์ ์๊ฐ์ด ์๋ค.
์ ๊ท ๊ธฐ๋ฅ ํ์ฐฝ ๊ฐ๋ฐ ์ค์ธ๋ฐ ๋ผ์ด๋ธ ๋ฒ๊ทธ๊ฐ ํฐ์ง๋ค. AI์๊ฒ ๋ฆฌํฉํ ๋ง์ ๋งก๊ฒผ๋๋ ์๊ฐ๋ณด๋ค ํ์ผ์ ๋ง์ด ๊ฑด๋๋ ค์ ๋ฉ์ธ ๋ธ๋์น๊ฐ ๋ถ์ํด์ง๋ค. ๋๋ฃ PR์ ๋ฆฌ๋ทฐํด์ผ ํ๋๋ฐ ๋ด ์์ ์ ๋ฉ์ถ๊ธฐ๋ ์ ๋งคํ๋ค.
์ด๋ด ๋ ๋ณดํต์ git stash๋ก ์์
์ ์์ ์ ์ฅํ๊ณ ๋ธ๋์น๋ฅผ ์ฎ๊ธฐ๊ณ , ๋๋๋ฉด ๋ค์ ๋ณต๊ทํ๋ ํ๋ฆ์ ๋ฐ๋ณตํ๋ค. ๋ฒ๊ฑฐ๋กญ๊ธฐ๋ ํ๊ณ , ๋ณต๊ท ํ์ "์ด๋๊น์ง ํ๋๋ผ"๋ฅผ ๋ค์ ํ์
ํ๋ ์ปจํ
์คํธ ์ค์์นญ ๋น์ฉ๋ ํฌ๋ค.
Git Worktree๋ ์ด ๊ตฌ์กฐ ์์ฒด๋ฅผ ๋ฐ๊ฟ์ค๋ค. Git 2.5(2015)๋ถํฐ ์๋ ๊ธฐ๋ฅ์ธ๋ฐ, AI ์ฝ๋ฉ ๋๊ตฌ๊ฐ ์ผ์ํ๋๋ฉด์ ๋ค์ ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ค.
1. Git Worktree
๋จ์ํ๊ฒ ๋งํ๋ฉด, ๊ฐ์ Git ์ ์ฅ์๋ฅผ ์ฌ๋ฌ ํด๋์์ ๋์์ ์ด์ด๋๋ ๊ธฐ๋ฅ์ด๋ค. ๊ธฐ์กด Git์ ์์ ๋๋ ํฐ๋ฆฌ๊ฐ ํ๋๋ฟ์ด๊ณ ๋ธ๋์น๋ฅผ ๋ฐ๊พธ๋ฉด ๊ทธ ํด๋ ์์ ํ์ผ์ด ํต์งธ๋ก ๊ต์ฒด๋๋ค. Worktree๋ ์ด ์ ์ฝ์ ์์ ์ค๋ค. ๋ธ๋์น๋ง๋ค ๋ณ๋์ ํด๋๋ฅผ ๋ง๋ค์ด์, ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ ์ ์๊ฒ ํด์ค๋ค.
- .git ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋๋ง ์กด์ฌํ๊ณ , Worktree๋ ๊ทธ๊ฑธ ๊ณต์ ํ๋ฉด์ ์์ ๊ณต๊ฐ๋ง ๋ฐ๋ก ๊ฐ๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ํต์งธ๋ก cloneํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, ์ฝ๋ ํ์คํ ๋ฆฌ๋ฅผ ์ค๋ณต ์ ์ฅํ์ง ์์์ ๋์คํฌ๋ ํจ์ฌ ๋ ์ด๋ค.
my-project/ ← main ๋ธ๋์น (๋ฉ์ธ ์์
๊ณต๊ฐ)
โโโ .git/ ← Git ๋ฐ์ดํฐ๋ฒ ์ด์ค (ํ์คํ ๋ฆฌ, ์ปค๋ฐ ์ ๋ถ ์ฌ๊ธฐ ์์)
../my-project-fix/ ← hotfix ๋ธ๋์น (Worktree)
โโโ .git ← ํ์ผ ํ๋ — ์ .git ํด๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
2. ์ฌ์ฉ
๊ธฐ๋ณธ ๋ช ๋ น์ด
| ๋ช ๋ น์ด | ์ค๋ช |
| git worktree add <๊ฒฝ๋ก> <๋ธ๋์น> | Worktree ์์ฑ |
| git worktree list | ์ ์ฒด ๋ชฉ๋ก ์กฐํ |
| git worktree remove <๊ฒฝ๋ก> | ์์ ์ญ์ |
| git worktree prune | ์ ๋ น Worktree ์ ๋ฆฌ |
| git worktree lock <๊ฒฝ๋ก> | prune ๋ณดํธ (USB ๋ฑ ์ธ์ฅ ๋๋ผ์ด๋ธ ์ฌ์ฉ ์) |
| git worktree repair | ํด๋ ์ด๋ ํ ์ฐ๊ฒฐ ๋ณต๊ตฌ |
ํ๋ก์ ํธ ํด๋์ ๋์ผํ ์์น์ ๋ง๋ค๊ธฐ
ํ๋ก์ ํธ ํด๋ ์์ Worktree๋ฅผ ๋ง๋ค๋ฉด Git์ด ๊ทธ ํด๋๋ฅผ ์ถ์ ์ ๋ ํ์ผ๋ก ์ธ์ํด์ git status ์ถ๋ ฅ์ด ๊ณ์ ์ค์ผ๋๋ค.
# ์ด๋ ๊ฒ ํ๋ฉด git status๊ฐ ์ง์ ๋ถํด์ง
git worktree add ./my-worktree main
# ํ๋ก์ ํธ ํด๋ ๋ฐ๊นฅ, ๋๋ํ ์์น์ ๋ง๋๋ ๊ฒ ๋ง์
git worktree add ../my-worktree main
๊ฐ์ ๋ธ๋์น๋ ํ ๊ณณ์์๋ง ์์ ํ๊ธฐ
Git์ ๋์ผ ๋ธ๋์น๋ฅผ ๋ ํด๋์์ ๋์์ ์์ ํ๋ ์ํฉ์ ๋ง์์ค๋ค. ์ด๋ฏธ main์ ์ด๊ณ ์๋ ์ํ์์ ์ Worktree์๋ main์ ์ฒดํฌ์์ํ๋ ค ํ๋ฉด Fatal ์๋ฌ๊ฐ ๋๋ค. ์ฝ๊ธฐ๋ง ํ ๋ชฉ์ ์ด๋ผ๋ฉด --detach ์ต์
์ ์ฐ๋ฉด ๋๋ค.
git worktree add ../just-looking --detach
์์กด์ฑ ํด๋๋ ๋ฐ๋ก ์ค์นํ๊ธฐ
node_modules, venv ๊ฐ์ ์์กด์ฑ ํด๋๋ ์๋์ผ๋ก ๋ณต์ฌ๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ Worktree๋ง๋ค ๋ฐ๋ก ์ค์นํด์ผ ํ๋ค. pnpm์ ์ฐ๋ฉด ํ์ผ์ ๋ณต์ฌํ์ง ์๊ณ ๋งํฌ๋ฅผ ๊ฑธ๊ธฐ ๋๋ฌธ์ ๋์คํฌ ์ฌ์ฉ๋๊ณผ ์ค์น ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์๋ค.
cd ../my-worktree
npm install # ๋น ๋จ๋ฆฌ๋ฉด ์คํ์ด ์ ๋จ
3. ํ์ฉ
stash ์์ด ํซํฝ์ค ๋์
stash pop ์์ด, IDE ์ฌ์์ธ ์์ด, ์ปจํ ์คํธ๋ ๊ทธ๋๋ก๋ค.
# ๊ธฐ๋ฅ ๊ฐ๋ฐ ์ค์ธ ์ํ ๊ทธ๋๋ก ๋๊ณ
# ๋ฉ์ธ ๊ธฐ์ค์ผ๋ก ํซํฝ์ค ํด๋๋ง ๋ฐ๋ก ์คํ
git worktree add ../hotfix main
cd ../hotfix
git checkout -b hotfix/critical-bug
# ์์ ์์
git commit -m "fix: ๊ธด๊ธ ๋ฒ๊ทธ ์์ "
git push origin hotfix/critical-bug
# ์๋ ํด๋๋ก ๋์์ค๋ฉด ์์
์ํ ๊ทธ๋๋ก
cd ../my-project
๋์ ๋ค๋ฐ ์์
์ธ ๊ฐ์ง ์ผ์ด ํ๊บผ๋ฒ์ ์ฃผ์ด์ง ์ํฉ์ ๊ฐ์ ํด๋ณด์. ์ธ ์๋ฒ๊ฐ ๋์์ ๋ฌ๋ค. ํฌํธ๋ ๊ฐ ํ๋ก์ ํธ ์ค์ ์์ ์๋์ผ๋ก ์ง์ ํด์ผ ํ์ง๋ง, ์์ ๊ฐ ๊ฐ์ญ์ ์ ํ ์๋ค.
ํฐ๋ฏธ๋ A: ~/projects/my-app/ → ๊ธฐ๋ฅ ๊ฐ๋ฐ ์ค (3000 ํฌํธ)
ํฐ๋ฏธ๋ B: ~/projects/my-app-review/ → ๋๋ฃ PR ๋ฆฌ๋ทฐ (3001 ํฌํธ)
ํฐ๋ฏธ๋ C: ~/projects/my-app-hotfix/ → ๊ธด๊ธ ๋ฒ๊ทธ ์์ (3002 ํฌํธ)
PR ๋ฆฌ๋ทฐ ์ ์ฉ ํ๊ฒฝ
๋๋ฃ PR์ ๋ด ๋ก์ปฌ์์ ์ง์ ๋๋ ค๋ณด๊ณ ์ถ์ ๋
git fetch origin pull/42/head:pr-42
git worktree add ../review-pr42 pr-42
cd ../review-pr42
npm install && npm test
# ์ฝ๋ ์ด๊ฒ์ ๊ฒ ๊ฑด๋๋ ค๋ด๋ ๋ด ์์
์ ์ํฅ ์์
# ๋ฆฌ๋ทฐ ๋๋๋ฉด ๊น๋ํ๊ฒ ์ ๋ฆฌ
cd ../my-project
git worktree remove ../review-pr42
git branch -D pr-42
์ ๊ทผ๋ฒ ๋น๊ต
๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก AI์๊ฒ ์์ผ๋ณด๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๋ํ ๋น๊ตํ ์ ์๋ค.
claude --worktree approach-a -p "์ด๋ฒคํธ ์์คํ
์ ์ต์ ๋ฒ ํจํด์ผ๋ก ๋ฆฌํฉํ ๋งํด์ค"
claude --worktree approach-b -p "์ด๋ฒคํธ ์์คํ
์ ๋ฉ์์ง ๋ฒ์ค ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋งํด์ค"
# ๋ ๊ฒฐ๊ณผ๋ฅผ diff๋ก ๋น๊ต
git diff worktree-approach-a..worktree-approach-b
4. Claude Code์ ํจ๊ป ์ฐ๊ธฐ
Claude Code(v2.1.49+)์๋ --worktree ํ๋๊ทธ๊ฐ ๋ด์ฅ๋์ด ์๋ค. Git ๋ช
๋ น์ ์ง์ ์น์ง ์์๋ Claude๊ฐ Worktree๋ฅผ ์์์ ๋ง๋ค๊ณ ์์
ํ๋ค.
.claude/worktrees/<n>/์ Worktree ์๋ ์์ฑworktree-<n>๋ธ๋์น๋ฅผ ๋ถ๊ธฐํด์ ๊ทธ ์์์๋ง ํ์ผ ์์ - ์ธ์ ์ข ๋ฃ ์, ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ๋ฉด ์๋ ์ญ์ / ์์ผ๋ฉด ์ ํ
# ์ด๋ฆ ์ง์
claude --worktree refactor-battle-system
# ์ด๋ฆ ์๋ต (๋๋ค ์ด๋ฆ ์๋ ์์ฑ)
claude --worktree
# Claude Code Worktree ํด๋๊ฐ Git์ ์ถ์ ๋์ง ์๋๋ก
.claude/worktrees/
์์ด์ ํธ ์ ์ ํ์ผ์ isolation: worktree๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ์์ด์ ํธ๋ ํญ์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์๋ง ์คํ๋๋ค.
---
name: safe-refactor
description: ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ๋ฆฌํฉํ ๋ง์ ์ํํ๋ ์์ด์ ํธ
isolation: worktree
---
์ฌ๋ฌ ์์ด์ ํธ๋ฅผ ๋์์ ๋๋ฆด ๋๋ ๊ฐ์ ๋ค๋ฅธ Worktree์์ ์์ ํ๋ฏ๋ก ์๋ก ๊ฐ์ญ์ด ์๋ค.
claude --worktree ai-auth --dangerously-skip-permissions -p "์ธ์ฆ ๋ชจ๋ ๊ฐ์ " &
claude --worktree ai-db --dangerously-skip-permissions -p "์ฟผ๋ฆฌ ์ต์ ํ" &
claude --worktree ai-api --dangerously-skip-permissions -p "API ํ์
์ ๋ฆฌ" &
wait
Claude Code ์ธ์๋ Cursor์ Parallel Agents(์ต๋ 8๊ฐ), OpenAI Codex CLI ๋ชจ๋ ๊ฐ์ ์๋ฆฌ๋ก Worktree ๊ธฐ๋ฐ ๋ณ๋ ฌ ์คํ์ ์ง์ํ๋ค.
5. ๊ฒ์ ํด๋ผ์ด์ธํธ์์ ํ์ฉํ๊ธฐ
๊ฒ์ ํด๋ผ์ด์ธํธ๋ ์ ํฌ, ์ธ๋ฒคํ ๋ฆฌ, ๋คํธ์ํฌ, ๋ ๋๋ง์ฒ๋ผ ์์คํ ๊ฐ ์์กด์ฑ์ด ๋ณต์กํ๊ฒ ์ฝํ ์๋ค. ํ ๋ธ๋์น์์ ์ฌ๋ฌ ์์ ์ด ๋ค์์ด๋ฉด ๋ฆฌ๋ทฐ๋ ๋จธ์ง๋ ์ด๋ ค์์ง๋ค. ์ ํจํด๋ค์ ๊ทธ๋๋ก ์ ์ฉํ ์ ์๊ณ , ํนํ ์๋ ์ํฉ์์ ์ ์ฉํ๋ค.
์์คํ ๋ณ AI ๋ณ๋ ฌ ๋ฆฌํฉํ ๋ง
- ์ ํฌ, ํ์คํธ, ์ธ๋ฒคํ ๋ฆฌ์ฒ๋ผ ๋ ๋ฆฝ์ฑ์ด ๋์ ์์คํ ์ ๊ฐ๊ฐ ๋ค๋ฅธ Worktree์์ AI์๊ฒ ๋์์ ๋งก๊ธธ ์ ์๋ค
- ์๋ก ๋ค๋ฅธ ํด๋์์ ์๋ํ๋ฏ๋ก ํ์ผ ์ถฉ๋ ์์
- ๊ฒฐ๊ณผ๋ ์์คํ ๋ง๋ค ๊ฐ๋ณ ๊ฒํ ํ ์ ํ์ ์ผ๋ก ๋จธ์ง
๋ผ์ด๋ธ ํซํฝ์ค ๋์
- ๋น๋ ์๋ฒ์์ ํฌ๋์ ๋ฆฌํฌํธ๊ฐ ์ฌ๋ผ์๋ ์งํ ์ค์ธ ํผ์ฒ ๋ธ๋์น๋ฅผ stash ์์ด ๊ทธ๋๋ก ๋ ์ ์๋ค
- ํซํฝ์ค Worktree๋ฅผ ๋ณ๋๋ก ์ด์ด ๋ฐ๋ก ๋์ → ์๋ฃ ํ ์ ๋ฆฌํ๊ณ ์๋ ์์ ์ผ๋ก ๋ณต๊ท
๋ก์ปฌ ํ๊ฒฝ ์ด๊ธฐํ ์คํฌ๋ฆฝํธํ
- ์ฝ๋ ์์ฑ, ๋ฆฌ์์ค ๋น๋, ํ๋กํ ์ ๋ฐ์ดํธ ๋ฑ ๋ก์ปฌ ์ธํ ์ด ๋ณต์กํ ํ๋ก์ ํธ์ผ์๋ก ํจ๊ณผ์
- Worktree๋ฅผ ์๋ก ์ด ๋๋ง๋ค ๋ฐ๋ณตํ๊ฒ ๋๋ฏ๋ก ์ด๊ธฐํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ ๊ฒ์ ๊ถ์ฅ
์ฃผ์!
์๋ํฐ ์คํ์ด ํ์ํ ์์ ์ ์ฃผ์๊ฐ ํ์ํ๋ค. Worktree๋ ํ์ผ ์์คํ ์ ๋ณ๋ ํด๋์ด๊ธฐ ๋๋ฌธ์, ๊ฒ์ ์์ง์ด ๊ด๋ฆฌํ๋ ์บ์ ํด๋๊ฐ Worktree๋ง๋ค ์๋ก ์์ฑ๋๋ค.
| ๋ฌธ์ | ๋ด์ฉ |
|---|---|
| ์บ์ ์ฌ์์ฑ | ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ํฌํธ ์บ์, ์ ฐ์ด๋ ์บ์ ๋ฑ์ด Worktree๋ง๋ค ์๋ก ๋ง๋ค์ด์ง |
| ์ฌ์ํฌํธ ์๊ฐ | ์๋ํฐ ์ฒซ ์คํ ์ ์ ์ฒด ์์ ์ฌ์ํฌํธ ๋ฐ์ — ๊ท๋ชจ์ ๋ฐ๋ผ ์ ๋ถ~์์ญ ๋ถ ์์ |
| ๋์ ์คํ ์ถฉ๋ | ๊ฐ์ ํ๋ก์ ํธ๋ฅผ ๋ Worktree์์ ๋์์ ์๋ํฐ๋ก ์ด๋ฉด ์บ์·๋ผ์ด์ ์ค ์ถฉ๋ ๊ฐ๋ฅ |
์ฐธ๊ณ
https://goddaehee.tistory.com/521
Claude Code v2.1.49 ์ ๊ธฐ๋ฅ ๋ฆฌ๋ทฐ : --worktree๋ก ๋ฉํฐ ์์ด์ ํธ ์์ ํ๊ฒ ์ฐ๊ธฐ, ๋ณ๋ ฌ ์์ ํ๊ฒฝ ๊ตฌ์ถ ํ๊ธฐ
์๋ ํ์ธ์! ๊ฐ๋ํฌ ์ ๋๋ค.์ค๋์ Git Worktree ์ง์ ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค.Claude Code๋ก ์ฌ๋ฌ ์์ ์ ๋์์ ์งํํ๋ค ๋ณด๋ฉด ํ ์ธ์ ์ ๋ณ๊ฒฝ์ฌํญ์ด ๋ค๋ฅธ ์ธ์ ๊ณผ ์ถฉ๋ํ๊ฑฐ๋, ์คํ์ ์ธ ์ฝ๋๊ฐ
goddaehee.tistory.com
Git Worktree๋ก AI ์ํฌํ๋ก ๊ด๋ฆฌํ๊ธฐ: ํ์ ๊ณผ ์ปจํ ์คํธ ๋ถ๋ฆฌ ์ ๋ต
AI ๊ธฐ๋ฐ ๊ฐ๋ฐ ํ๋ฆ์ด ๋น ๋ฅด๊ฒ ์๋ฆฌ ์ก์ผ๋ฉด์,Git์ Worktree ๊ธฐ๋ฅ์ ํ์ ๊ณผ ์๋ํ ์ํฌํ๋ก๋ฅผ ๊ตฌ์ฑํ ๋ ์ ์ฉํ ๋ฌด๊ธฐ๊ฐ ๋๊ณ ์์ต๋๋ค.ํนํ Claude, Gemini, Codex ๋ฑ AI ๋๊ตฌ๋ค์ ์ฐ๊ณํด ์์ ์ ๊ตฌ์ฑํ๋ค
velog.io
https://www.youtube.com/watch?v=JtA2JeqlTnI