Git Worktree: 複数のブランチを同時に作業する
git worktree を使って複数のブランチを別々のディレクトリで同時にチェックアウトする方法を解説。ブランチ切り替え前の stash やコミットが不要になります。
git worktree add ../hotfix-branch hotfix/urgent-fix詳細な説明
git worktree は何をするのか?
git worktree を使うと、同じリポジトリの複数のブランチをそれぞれ独立したディレクトリで同時にチェックアウトできます。すべてのワークツリーは同じ .git データを共有するため、オブジェクトデータベースの重複はありません。
ワークツリーの作成
# 既存のブランチを新しいディレクトリにチェックアウト
git worktree add ../hotfix-branch hotfix/urgent-fix
# 新しいブランチを新しいワークツリーに作成
git worktree add -b feature/new-feature ../new-feature
ワークツリーの一覧表示
git worktree list
# /home/user/project abc1234 [main]
# /home/user/hotfix-branch def5678 [hotfix/urgent-fix]
ワークツリーの削除
# 作業完了後に削除
git worktree remove ../hotfix-branch
# 変更がある場合は強制削除
git worktree remove --force ../hotfix-branch
# 古くなったワークツリー参照を整理
git worktree prune
なぜワークツリーを使うのか?
ワークツリーがなければ、ブランチの切り替えには未完成の作業のコミット、stash、または変更の破棄が必要です。ワークツリーを使えば:
- ホットフィックスに取り組みながら、feature ブランチを別のターミナルで開いたままにできる。
- あるブランチでテストを実行しながら、別のブランチで開発できる。
- ブランチ間の動作をサイドバイサイドで比較できる。
ワークツリー vs. 複数クローン
| ワークツリー | 別クローン | |
|---|---|---|
| ディスク使用量 | オブジェクトを共有 | すべてを複製 |
| ブランチロック | 同じブランチを2箇所でチェックアウト不可 | 制限なし |
| セットアップ時間 | 即座 | 完全なクローンが必要 |
制限事項
各ブランチは一度に1つのワークツリーにしかチェックアウトできません。同じブランチを2箇所で必要な場合は、別のクローンを使う必要があります。また、ワークツリーはステージングエリアの設定を共有するため、グローバルな git hook に注意してください。
ワークツリーは Git で最も活用されていない機能の一つです。一度使うと、従来のブランチ切り替え方法が苦痛に感じるようになります。
ユースケース
開発者が feature ブランチでの作業中に本番環境の重大なバグが報告された場合、ホットフィックスブランチ用のワークツリーを作成してバグを修正し、コンテキストを失わずに feature の作業に戻る場面で使用します。