🌲

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で片付けるのがよい。

動作フロー

1

`git worktree add ../path branch-name` → 新ディレクトリにブランチをチェックアウト

2

`git worktree list` → 登録済みworktreeの確認

3

各worktreeで独立してコミット/ビルド/テスト可能

4

`git worktree remove ../path` → 作業終了後に片付け

メリット

  • 再cloneより速くディスク節約
  • stashなしでブランチ並行作業

デメリット

  • 同一ブランチの同時チェックアウト不可
  • 放置されたworktreeが管理を複雑にする

ユースケース

長いCI/ビルドとの並行作業 PRレビュー用の別チェックアウト 緊急hotfix対応 AIエージェントにworktree単位のisolationを提供

参考資料