Git Ready
複数ブランチを同時に開く - git worktree の使い方・オプション・サンプル

複数ブランチを同時に開く- git worktree

1つのリポジトリから複数の作業ディレクトリ(ワークツリー)を生やして、別ブランチを同時にチェックアウトします。

概念図

git worktree diagram

構文

bash
git worktree <add|list|remove|prune> [<args>]

使用例

新しい作業ディレクトリで hotfix ブランチを開く

bash
git worktree add ../my-app-hotfix hotfix/login

新規ブランチを切って別ディレクトリで作業

bash
git worktree add -b feature/new ../my-app-feature

現在の worktree 一覧を表示

bash
git worktree list

worktree を安全に削除

bash
git worktree remove ../my-app-hotfix

手動削除した worktree の管理情報を掃除

bash
git worktree prune

worktree とは

git worktree は、1つのリポジトリ(.git ディレクトリ)を共有しつつ、複数の作業ディレクトリを作る仕組みです。

通常の git clone と違って履歴やオブジェクトは共有されるため、ディスク使用量が小さく、取得済みのコミットを再ダウンロードする必要もありません。

典型的な使い所は「feature ブランチを書いている途中に hotfix の依頼が来た」ような場面です。

git stash で退避してブランチを切り替える代わりに、別ディレクトリに hotfix ブランチを生やせば、現在の作業は触らずに並行作業できます。

ビルド成果物や node_modules もディレクトリごとに独立するため、ブランチ切り替え時の再ビルド地獄からも解放されます。

近年は Claude Code などの AI エージェントが並列で作業するための分離環境としても注目されています。

基本的な使い方

  1. worktree を追加する

    git worktree add <path> <branch> で既存ブランチを別ディレクトリにチェックアウトします。新規ブランチを同時に作る場合は -b オプションを付けます。パスはリポジトリの外(例: ../my-app-hotfix)に置くのが一般的です。

  2. 別ディレクトリで作業する

    作成された worktree ディレクトリに cd して、通常通り git add / git commit / git push を行います。ブランチごとに独立した作業ツリーなので、ビルドもテストも並行で回せます。

  3. 一覧を確認する

    git worktree list で現在存在する worktree と、それぞれがどのブランチ・コミットを指しているかを確認できます。

  4. 不要になったら削除する

    git worktree remove <path> で安全に削除できます。対象ディレクトリを rm -rf で消すのは避けてください(管理情報が残ってしまいます)。誤って手で消してしまった場合は git worktree prune で掃除できます。

bash
# 1. hotfix ブランチを別ディレクトリで開く
git worktree add ../my-app-hotfix hotfix/login

# 2. 新規ブランチを切って作業
git worktree add -b feature/new ../my-app-feature

# 3. 一覧を確認
git worktree list

# 4. 使い終わったら削除
git worktree remove ../my-app-hotfix

ハマりポイント

  • 同じブランチを2つの worktree で開けない

    Git は同じブランチを複数の worktree で同時にチェックアウトすることを禁止しています(HEADの同期が取れなくなるため)。どうしても必要な場合は --force を付けるか、別ブランチを切って作業してください。

  • rm -rf での削除は残骸を残す

    ディレクトリを直接削除すると、.git/worktrees/<name>/ に管理情報が残り、git worktree list に「prunable」として表示され続けます。git worktree remove を使うか、後から git worktree prune で掃除しましょう。

  • submodule・node_modules は自動では共有されない

    worktree は .git は共有しますが、サブモジュールや node_modules はディレクトリごとに独立です。新しい worktree でも git submodule update --initpnpm install を忘れずに実行してください。

  • フック・設定はメインの .git を参照する

    .git/hooksconfig はメインリポジトリ側に置かれるため、worktree ごとに別のフックを設定することはできません(共有が基本)。

  • stash との使い分け

    「数分で戻る一時退避」なら git stash、「数時間〜数日並行して触る別ブランチ」なら git worktree が向いています。ビルド環境ごと分離できるのが worktree の強みです。

関連コマンド