← 記事一覧へ

git worktree:ブランチごとに作業フォルダを分ける

stashやcloneをせずに、1つのリポジトリで複数のブランチを同時に開く方法。

AI作成 · 約5分 · Gitの基本的なコマンドが使える人向け
Gitworktreeワークフロー
この記事で扱うこと

worktreeは、履歴を共有したまま作業フォルダだけを増やす仕組みです。作る、使う、片づける、の3つのコマンドで足ります。

作業を中断せずに、別のブランチを開く

作業の途中で、急ぎの修正が入ることがあります。ブランチを切り替えるには、変更をコミットかstashで退避しなければなりません。リポジトリをもう一つcloneする方法もありますが、履歴が二重になり、片方で取り込んだ内容がもう片方には見えません。

1つのリポジトリと、複数の作業フォルダ.git(履歴とブランチ)共有されるappmainapp-fixfix/typoapp-reviewpr-42
図1 履歴は.gitに1つだけ。作業フォルダごとに、別のブランチが開かれる。

git worktreeを使うと、1つのリポジトリに、作業フォルダを複数持てます。履歴とブランチは共有され、フォルダごとに別のブランチが開かれます。

作業フォルダは、メインのフォルダの外に作ります。中に作ると、メインの側から未追跡のファイルに見えてしまいます。

下の図のように、履歴は1つで、作業フォルダが複数になります。

作る・使う・片づける

新しい作業フォルダは、git worktree addで作ります。-bを付けると、新しいブランチも同時に作れます。

Shell
# ../app-fix に、fix/typo という新しいブランチを開く
git worktree add ../app-fix -b fix/typo

# いま開いているフォルダの一覧
git worktree list

作ったフォルダに移動すれば、普通のリポジトリと同じようにコミットできます。終わってPRを出したら、フォルダを片づけます。

Shell
git worktree remove ../app-fix

removeは、コミットされていない変更があるフォルダを消しません。変更が残っていれば、先にコミットするか捨てるかを選びます。ブランチ自体は残るので、不要なら別に削除します。

知っておくこと

  • 同じブランチは、同時に1つの作業フォルダでしか開けません。 すでに別のフォルダで開いているブランチを指定すると、エラーになります。
  • 作業フォルダには.gitがファイルとして置かれます。 中身は、メインのリポジトリの.gitを指すパスです。このファイルを消すと、Gitがフォルダを認識できなくなります。
  • 依存関係は、フォルダごとに入れ直します。 node_modulesのような、追跡されないファイルは共有されません。
  • フォルダを手で消したときは、git worktree pruneで記録を整理します。 記録が残っていると、同じブランチを開き直せなくなることがあります。

作業フォルダが増えたら、git worktree listで今の状態を確認します。使い終わったフォルダは、早めに片づけます。

並行して作業するときに向いている場面

  • 作業の途中で、急ぎの修正を別ブランチで出したい
  • 他の人のPRを、手元のブランチを動かさずに動かして確認したい
  • 長いビルドやテストを回している間に、別の作業を進めたい
  • Claude Codeなどのエージェントに、別のブランチで作業させたい(作業が混ざらないよう、フォルダを分けられる)

公式リファレンス

Git — git-worktree Documentation ↗
PAIBOT / DEVELOPMENT JOURNAL記事一覧に戻る →

知りたいことを探す

タイトル・タグ・本文から検索 esc で閉じる