Git Worktree のインストールと使い方まとめ

Tech
Table of Contents

Git Worktree とは

一つのリポジトリから複数の作業ディレクトリを同時に展開できる Git の機能です。ブランチの切り替えなしに、複数ブランチを並行して作業できます。

Git リポジトリ (.git)
├── メイン worktree      … branch: main        ./myproject
├── リンク worktree 1    … branch: feature/login  ../myproject-login
└── リンク worktree 2    … branch: hotfix/bug123  ../myproject-hotfix
         ↓ すべて共有
    共有オブジェクトストア(コミット履歴・ブロブ・ツリー・タグ)

インストール

Git Worktree は Git 2.5 以降に標準搭載 されているため、別途インストールは不要です。

git --version  # 2.5+ であればOK

基本的な使い方

worktree を追加する

# 既存ブランチを別ディレクトリで展開
git worktree add ../myproject-feature feature/login

# 新しいブランチを作りながら追加 (-b オプション)
git worktree add -b hotfix/bug123 ../myproject-hotfix

# デタッチドHEADで特定コミットを展開
git worktree add --detach ../myproject-review abc1234

一覧を確認する

git worktree list
# /home/user/myproject         abc1234 [main]
# /home/user/myproject-feature def5678 [feature/login]
# /home/user/myproject-hotfix  ghi9012 [hotfix/bug123]

worktree を削除する

# ディレクトリを削除してから登録解除
git worktree remove ../myproject-feature

# 強制削除(変更があっても)
git worktree remove --force ../myproject-feature

# 削除済みディレクトリの参照をクリーンアップ
git worktree prune

代表的なユースケース

シナリオ 内容
並行開発 feature ブランチを触りながら hotfix も同時に作業
レビュー 自分の作業を止めずに PR を別ディレクトリでチェック
ビルド比較 main と feature で同時にビルドして差を比較
CI環境 単一リポジトリから複数ブランチのビルドを並列実行

注意点

  • 同じブランチを複数の worktree でチェックアウトすることはできない
  • .git ディレクトリはメイン worktree にのみ存在し、リンク worktree には .git ファイル(参照)が置かれる
  • git stash はリポジトリ全体で共有されるので、どの worktree からでもアクセスできる
  • worktree を削除したあと git worktree prune で参照を整理するとよい

コメント