git worktreeとの出会い
git worktree は一つのローカルリポジトリで作業ツリーを複数持つことができるGitの機能です。AI本格利用以前の自分は、git switchやgit stashなどで十分だなと思ってました。しかし、AIを本格的に使っていく中で「Claude複数のそれぞれの作業を別ブランチでやりたい」「Claudeが動いているからこの差し込みタスクを人間がチラッとみるのが辛い」といったローカルリポジトリの競合が発生し再注目されるようになりました
git worktreeの文法
git worktreeでよく使うコマンドはこのようになっています。
すでに他のworktreeでcheckoutしているブランチはHEAD を複数作業ツリーで共有できないため、addでは追加できないことに注意する必要があります。
| サブコマンド名 | 第一引数 | 第二引数 | 効果 |
|---|---|---|---|
| add | 生成する作業ツリーのパス | チェックアウトしたいCommit・branch名 | worktreeを作成する |
| remove | 削除したい作業ツリーのPath | 作業ツリーを削除しworktree管理から削除する | |
| list | 今のlocalリポジトリが管理している作業ツリーのリストを表示 |
git worktree活用法
git worktreeはメインで使う ~/リポジトリ名 は常にmain / masterの状態を維持して
普段はghとの組み合わせもする関係でclaude code でworktreeの生成まで任せているの使っていませんが以下のようなオリジナルworktreeコマンドを作ると管理が楽になるかもしれません。以下Bashでの例です。
if [ $# -ne 1 ]; then
echo "エラー: 引数が必要です"
exit 1
fi
BRANCH_NAME = "$1"
git pull
if [ $? -ne 0]; then
echo "error: faild git pull"
exit 1
fi
git worktree add ~/worktree/"$BRANCH_NAME" "$BRANCH_NAME"
ここでのポイントはaddのあとを ~/worktree と$HOMEからのPathにしていることです。これによって実行時のブレを最小限にしています。リポジトリ名を取得し、リポジトリ名もディレクトリ名に添えるとより使いやすくなると思います。
git worktreeも定期的にremovedするようclaudeに指示する or いい感じのシェルを描いてもらうことで元々あった管理の難しさと言ったものもだいぶ減ってきて使いやすくなったかなと思います。vscodeで見たくないworktreeまで表示されてしまうなどいくつか癖があるworktreeですが使ったことないというのは勿体無いので設定不要でできるworktree一度は使ってみてくださいね。