하나의 프로젝트에서 여러 브랜치를 띄워놓고 동시에 작업할 수 있다

하나의 프로젝트라도 보통 여러 브랜치로 나누어 관리하기 때문에 코드를 비교하거나 병합하는 과정에서 동시에 여러 브랜치를 띄워서 작업해야 하는 상황이 종종 발생한다.
이때 가장 쉬운 방법은 Git에서 동일한 프로젝트를 하나 더 Clone 해서 두개의 프로젝트에서 각각의 브랜치를 띄워놓고 작업하면 된다.
하지만 worktree를 사용하면 하나의 프로젝트에서 여러 브랜치를 효율적으로 관리할 수 있다.
💡 worktree란?
Git worktree는 하나의 Git 저장소에서 여러 개의 작업 디렉터리(working directory)를 동시에 관리할 수 있는 기능이다. 이를 통해 개발자는 로컬 환경에서 여러 브랜치를 병렬로 작업할 수 있다.
1. Main Worktree (메인 작업 트리)
- Git을 clone 했을 때 기본적으로 생성되는 디렉터리
- .git 디렉토리를 포함하고 있으며, 일반적인 Git 작업(브랜치 체크아웃, 커밋 등)을 수행할 수 있다.
- Ex) ~/project 디렉토리
2. Linked Worktree (연결된 작업 트리)
- git worktree add 명령어로 추가로 만든 작업 디렉터리
- 특정 브랜치를 체크아웃해서 별도의 디렉토리에서 작업할 수 있게 해준다.
- .git 디렉토리를 직접 포함하지 않고, 메인 작업 트리의 .git 디렉토리를 참조한다.
- Ex) ~/project-feature1, ~/project-hotfix 등
⁉️ 왜 사용해야 할까
브랜치를 자주 비교하거나 병렬로 작업할 때, 기존 방식으로는 브랜치를 계속 체크아웃해야 해서 불편한 점을 worktree를 사용하면 브랜치별로 독립된 디렉토리에서 동시에 작업 가능하므로, 컨텍스트 전환 없이 효율적으로 개발할 수 있다.
즉, IDE에서 worktree를 생성하면 하나의 프로젝트지만 Linked worktree를 별개의 프로젝트로 인식하여 프로젝트 창이 추가로 열린다.
🧑🏻💻 사용 방법
1. add : 새로운 worktree 추가
새로운 브랜치 또는 기존 브랜치를 다른 디렉터리에 체크아웃한다.
git worktree add ../project-feature feature/login
- ../project-feature 디렉토리에 feature/login 브랜치를 체크아웃한 linked worktree 생성
- 존재하지 않는 브랜치면 자동으로 만들어짐
2. list : 현재 worktree 목록 보기
현재 생성된 모든 worktree를 확인한다.
git worktree list
# 출력 예시
/home/user/project abc123 [main]
/home/user/project-feature def456 [feature/login]
- 첫 줄: 메인 worktree
- 아래 줄들: linked worktree
3. move : worktree 디렉토리 위치 변경
linked worktree의 디렉토리 위치를 변경할 때 사용한다.
git worktree move ../project-feature ../login-feature-work
- ../project-feature → ../login-feature-work로 디렉토리 이름 또는 위치 이동
4. remove : worktree 삭제
linked worktree를 안전하게 제거한다.
git worktree remove ../login-feature-work
- 디렉토리를 지우고, Git 내부 관리 정보도 정리한다.
- 그냥 rm -rf 하면 Git은 여전히 해당 worktree가 있다고 인식하므로 반드시 이 명령을 사용해야 한다.
*공식 문서
https://git-scm.com/docs/git-worktree
728x90
'🛠️DevTools > Git' 카테고리의 다른 글
| [Git] Svn 프로젝트 Git으로 마이그레이션 하기 (git svn) (0) | 2025.05.15 |
|---|---|
| [Git] 특정 커밋 Merge 하기 (cherry-pick) (4) | 2025.01.20 |
| [Git] .gitignore 사용법 (0) | 2023.08.27 |
| [Git] Git 명령어 (0) | 2023.08.27 |
| [Git] Fork. Repository변경사항 업데이트 (0) | 2023.08.27 |