worktreeで複数ブランチを同時にチェックアウト
何度もcloneしなくていい
素のGitは1つのcloneにつき1ブランチしかチェックアウトできない。別ブランチに行くにはgit checkoutで切替が必要で、working treeの変更はコミットかstashする必要がある。
worktreeの解法
git worktree add ../other-branch feature-xを実行すると、同じリポジトリを参照する別ディレクトリが作られ、そこにfeature-xがチェックアウトされる。
これでディレクトリが2つになる:
./repo— mainで作業中../other-branch— feature-xで作業中
両方が同じ.gitを共有する。コミットは両側で即座に見える。
いつ使うべきか
長いビルド/テスト中。 片方でCIを回している間に、もう片方で次の作業を始められる。
レビューと開発の分離。 レビューするPRは別worktreeにチェックアウトし、自分の作業はメインworktreeで続ける。
緊急hotfix。 作業中のブランチをstashせず、新しいworktreeでhotfixブランチを作業してから片付ける。
制約
同じブランチを2つのworktreeに同時チェックアウトはできない。submoduleサポートはGit 2.25以降から正常動作する。使い終わったらgit worktree removeで片付けるのがよい。
動作フロー
`git worktree add ../path branch-name` → 新ディレクトリにブランチをチェックアウト
`git worktree list` → 登録済みworktreeの確認
各worktreeで独立してコミット/ビルド/テスト可能
`git worktree remove ../path` → 作業終了後に片付け
メリット
- ✓ 再cloneより速くディスク節約
- ✓ stashなしでブランチ並行作業
デメリット
- ✗ 同一ブランチの同時チェックアウト不可
- ✗ 放置されたworktreeが管理を複雑にする