git worktree を試してみる

備忘録。モノリポで、あるブランチで作業中に別ブランチで開発した他のアプリケーションを立ち上げてローカルで結合したい。そんなときに git worktree が使えそう。

git-scm.com

$ git worktree list
/Users/kntmr/workspace/repo                         e562a08b4f7 [feature/service-a]

# 指定したパスにそれぞれのブランチが checkout される
# checkout したブランチは独立しているため、作業中の worktree に影響を与えない
$ git worktree add ~/workspace/worktrees/feature/service-b feature/service-b
$ git worktree add ~/workspace/worktrees/feature/service-c feature/service-c

$ git worktree list
/Users/kntmr/workspace/repo                         e562a08b4f7 [feature/service-a]
/Users/kntmr/workspace/worktrees/feature/service-b  f3ce5c04f3c [feature/service-b]
/Users/kntmr/workspace/worktrees/feature/service-c  d017566d700 [feature/service-c]

# worktree を削除する
$ git worktree remove ~/workspace/worktrees/feature/service-b
$ git worktree remove ~/workspace/worktrees/feature/service-c

ディレクトリを作成して丸ごと clone, checkout する感じ。ローカルリポジトリからコピーしているっぽいのでそこまで時間はかからない。ちょっと別ブランチを作成して hotfix を commit したいみたいなときは stash で十分かもだけど、複数のブランチで同時に作業したいときには git worktree が便利そう。

前提

$ git --version
git version 2.29.2