🐕

せっかくClaude Codeがサジェストしてるし、最も簡単で・最も素朴で・一瞬で済む、git-worktreeへの移行方法を教える

に公開

git-worktreeとは?

git-worktreeは、同じGitリポジトリから複数の作業ディレクトリを作成できる機能です。
通常のGitでは、一つのリポジトリに対して一つの作業ディレクトリしか持てませんが、git-worktreeを使うことで、異なるブランチを異なるディレクトリで同時に作業できるようになります。

Git - git-worktree Documentation

使用例

$ git worktree add ../feature-branch feature-branch
$ git worktree add ../hotfix hotfix

このようにして、メインの開発は./で、新機能開発は../feature-branchで、緊急修正は../hotfixで、それぞれ独立して作業できます。
ブランチ切り替えの待機時間もなく、並行開発が劇的に効率化されます。

Claude Codeはgit-worktreeと相性がいい

実際に、Claude Codeを同じプロジェクトで複数立ち上げると、git-worktreeの使用をサジェストされます
これは偶然ではありません。

Claude Codeの強みは、複数のタスクを並行して処理できることです。git-worktreeを使うことで:

  • プロジェクトディレクトリを複数作成 → 並行作業が可能
  • ブランチ切り替えの待機時間なし → Claude Codeの応答性を最大化
  • 異なる機能を独立した環境で開発 → コンテキストの混乱を回避

この組み合わせにより、開発効率が格段に向上します。

最も簡単で・最もシンプルで・最も素朴で・一瞬で済む移行方法

たったこれだけです。

$ pwd
{your git root directory}
$ git branch --show-current
develop

$ git add -A
$ git stash push -m 'Before using git-worktree'

$ mv .git ..
$ rm -rf * .*  # gitにコミットしていない(ツリーに載っていない)ファイルは、以降の処理でも復元されないので、`$ git status --short`で`??`になっているファイルは他の場所で保護しておいてください
$ mv ../.git .

$ git switch --create dummy
$ git add -A
$ git commit -m 'dummy'

$ git worktree add develop develop  # 既存のブランチのworktreeを追加
$ git worktree add feature/deploy-to-gh-pages feature/deploy-to-gh-pages develop  # 新規ブランチを作成して、そのworktreeを追加

詳細解説

1. 現在の状況を確認

$ pwd
{your git root directory}
$ git branch --show-current
develop

まず、現在の作業ディレクトリとブランチを確認します。

2. 作業中のファイルを保存(オプション)

$ git add -A
$ git stash push -m 'Before using git-worktree'

コミットしていない作業中のファイルをgit-stashに保存します。
不要であればスキップしても構いません。
この記事では、stashの後処理は考慮しないので、自由に扱ってください。

3. 本処理開始

⚠️ 注意: $ rm -rf * .*で全てのファイルを削除します。
削除されるファイルはgitとstashに記録されていますが、不安な場合はgomiなどの安全削除ツールを使用してください。

なおbash依存のみの、gomiのようなコマンドもあります。

またgitにコミットしていない(ツリーに載っていない)ファイルは、以降の処理でも復元されないので、$ git status --short??になっているファイルは他の場所で保護しておいてください!

$ mv .git ..  # ..は他の場所でもOK
$ rm -rf * .*
$ mv ../.git .
$ git switch --create dummy  # dummyブランチを作成(名前は任意)
$ git add -A
$ git commit -m 'dummy'

4. worktreeを作成

ここからworktreeの作成です。

既存ブランチの復元:

$ git worktree add develop develop

./developにdevelopブランチの内容が復元されます。

リモートブランチを指定したい場合:

$ git worktree add develop origin/develop

ディレクトリ名を変更したい場合:

$ git worktree add my-develop-dir develop

新規ブランチを作成してworktreeを作る場合:

$ git worktree add feature/deploy-to-gh-pages feature/deploy-to-gh-pages develop
# または
$ git worktree add my-feature-dir feature/new-feature develop

5. 便利なシェル関数(おまけ)

効率化のために、以下のようなシェル関数を作ることをお勧めします:

完了!

これで完了です!

今後は:

  • ./developで通常のdevelop作業
  • ./feature/deploy-to-gh-pagesで自動デプロイ機能の実装

このように、複数のタスクを並行して継続できます。

Claude Codeと組み合わせることで、開発効率が劇的に向上すること間違いなしです!

Discussion