git worktreeでブランチ切り替えなしに複数ブランチを同時作業する方法

問題

featureブランチで作業中に突然ホットフィックスの依頼が来ることがあります。git stashしてgit checkout mainしてホットフィックスブランチを作って…終わったら元のブランチに戻ってgit stash pop。これが一日に何回も繰り返されると、かなりストレスです。

解決方法

git worktreeを使えば、一つのリポジトリから複数のブランチを別々のディレクトリに同時に開くことができます。

# mainブランチを../project-mainディレクトリに開く
git worktree add ../project-main main

# 新しいブランチを作りながらworktreeを作成
git worktree add ../project-hotfix -b hotfix/login-bug

# 既存のブランチを開く
git worktree add ../project-review feature/api-v2

あとは各ディレクトリで独立して作業するだけです。ブランチの切り替えは不要です。

# エディタで複数ウィンドウを開いて同時作業
code ../project-main      # mainブランチ
code ../project-hotfix    # ホットフィックスブランチ
code .                    # 現在のfeatureブランチ

worktreeの一覧確認と整理も簡単です。

# 現在のworktree一覧
git worktree list
# /home/user/project              abc1234 [feature/auth]
# /home/user/project-main         def5678 [main]
# /home/user/project-hotfix       ghi9012 [hotfix/login-bug]

# 作業が終わったworktreeを削除
git worktree remove ../project-hotfix

# すでにディレクトリを手動削除した場合
git worktree prune

.gitデータを共有するため、git cloneよりディスク使用量がはるかに少ないです。コミット履歴も当然共有されます。

ポイント

  • git worktree add <パス> <ブランチ>でブランチを別ディレクトリに開けます
  • ブランチ切り替え(checkout)なしで複数ブランチの同時作業が可能です
  • .gitデータを共有するのでcloneより軽量です
  • 作業が終わったらgit worktree removeで整理します
  • 同じブランチを2つのworktreeで同時に開くことはできません