2025/08/20 14:21 Git-worktree – Manage multiple working trees

やっほー、ロボ子!今日はGitの`worktree`コマンドについて話すのじゃ!

博士、こんにちは!`worktree`ですか、複数のブランチを同時にチェックアウトできる機能ですよね。

そうそう!一つのリポジトリに複数のワーキングツリーを接続できるのじゃ。例えば、`git worktree add <path> [<commit-ish>]`で新しいワーキングツリーを作れるぞ。

なるほど。緊急の修正を行うための一時的なワーキングツリーを作成するのに便利そうですね。要約にも「緊急の修正を行うために、一時的なリンクされたワーキングツリーを作成する例が示されている」とあります。

`<commit-ish>`に`-`を指定すると、直前のブランチを意味する`@{-1}`になるのは便利じゃな。

それは便利ですね!ところで、ワーキングツリーを削除する`git worktree remove`コマンドを使う場合、クリーンなワーキングツリーしか削除できないとありますが、`--force`オプションを使うとどうなるんですか?

`--force`を使うと、クリーンでないワーキングツリーやサブモジュールを含むワーキングツリーも強制的に削除できるのじゃ。でも、注意が必要だぞ!

なるほど、便利ですが、データを失う可能性もあるので慎重に使うべきですね。`git worktree list`コマンドでワーキングツリーの状態を確認することも重要ですね。

その通り!`git worktree list`は、ワーキングツリーがベアかどうか、チェックアウトされているリビジョン、ブランチ、ロック状態、削除可能かどうかを表示してくれるぞ。

ワーキングツリーがポータブルデバイスやネットワーク共有にある場合、`git worktree lock`コマンドでロックできるとありますが、これはどういう状況で使うんですか?

それは、ワーキングツリーが常にマウントされているとは限らない場合に、管理ファイルが自動的に削除されるのを防ぐために使うのじゃ。`--reason`オプションでロックの理由も指定できるぞ。

なるほど、ファイルが削除されてしまうリスクを避けるために使うんですね。ところで、`refs/`で始まる参照は共有されるとありますが、具体的にどのような情報が共有されるんですか?

`refs/`で始まる参照は、例えば、タグやリモート追跡ブランチの情報が共有されるのじゃ。一方、`HEAD`はワーキングツリーごとに異なる参照になるぞ。

理解しました!ワーキングツリーごとに異なる情報と、共有される情報があるんですね。ところで、`extensions.worktreeConfig`拡張機能を有効にすると、ワーキングツリー固有の構成が可能になるとありますが、これはどのような設定ができるようになるんですか?

例えば、ワーキングツリーごとに異なるエディタを設定したり、特定のスクリプトを実行したりできるのじゃ。これによって、より柔軟な開発環境を構築できるぞ。

それは便利ですね!プロジェクトごとに異なる設定を適用できるのは、非常に効率的だと思います。Gitの`worktree`コマンド、奥が深いですね。

そうじゃろ!使いこなせば開発効率が爆上がりじゃ!最後に一つ、ロボ子にクイズじゃ!

はい、なんでしょう?

Gitの`worktree`コマンドを使うと、どんな良いことがあるかな?

えーと…複数のブランチを同時にチェックアウトできる、緊急の修正に対応しやすい、プロジェクトごとに異なる設定を適用できる…って、全部言っちゃった!

正解!全部言っちゃった!…って、ロボ子の頭脳も`worktree`みたいに複数並列処理できるのじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。