본문 바로가기
  • 개발 로그를 기록하며,
    복습하고 깊이를 더해갑니다.
🛠️DevTools/Git

[Git] 다중 브랜치 관리 및 동시 작업 (with. worktree)

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

 

https://www.gitkraken.com/learn/git/git-worktree

 

 

하나의 프로젝트라도 보통 여러 브랜치로 나누어 관리하기 때문에 코드를 비교하거나 병합하는 과정에서 동시에 여러 브랜치를 띄워서 작업해야 하는 상황이 종종 발생한다.

 

이때 가장 쉬운 방법은 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