エンジニアの皆さん、こんにちは。
日々の開発で「あ、今の作業中に急ぎのバグ修正が入った!」と焦ったことはありませんか?
`git stash`して、`git checkout`して、ビルド待ちをして……ようやく修正が終わったらまた戻して……。この「コンテキストスイッチ」のコスト、実はあなたの開発体験を最も削り取っている悪の根源かもしれません。
今日は、そんなストレスを過去のものにする、Gitの知る人ぞ知る奥義「git worktree」を伝授します。これを使えば、「同一リポジトリ内で、複数のブランチを別のディレクトリに同時に展開する」という魔法が使えます。
—
なぜ `git worktree` なのか?
通常、Gitリポジトリは一つのディレクトリに一つのブランチしか「チェックアウト」できません。しかし、`git worktree`を使うと、メインの作業ディレクトリを汚さずに、別の場所(別のディレクトリ)に別のブランチを「生やす」ことができます。
- メリット:
- ビルドの保持: 重いビルドが終わった状態のディレクトリを残したまま、別のブランチで作業できる。
- 並行作業: レビュー待ちの間に修正を進めたり、別ブランチのログを確認したりするのが瞬時にできる。
- クリーンな状態: `stash`の管理から解放される。
—
1. インストール・準備は不要(もう入っています)
Gitさえ入っていれば、特別なインストールは一切不要です。
ターミナルを開いて、まずは現在のリポジトリを確認しましょう。
現在のディレクトリがGitリポジトリであることを確認
git rev-parse –is-inside-work-tree
-> true と返ってくれば準備完了!
—
2. 【最速実践】Worktreeの魔法を体験する
ここからが本題です。現在のプロジェクト(`my-project`とします)に加えて、`hotfix-branch`を別の場所で開く手順です。
手順①:現在の状態を確認
現在のworktreeを確認
git worktree list
-> /path/to/my-project (メインのディレクトリ)
手順②:新しいブランチ用のディレクトリを作成して紐付け
ここで、`../hotfix-dir`という場所に、`hotfix-branch`を展開します。
git worktree add <ディレクトリ名> <ブランチ名>
git worktree add ../hotfix-dir hotfix-branch
※ もし`hotfix-branch`がまだない場合は `-b` オプションで作成できます。
`git worktree add ../hotfix-dir -b hotfix-branch`
手順③:確認してみる
再度リストを確認
git worktree list
すると、2つのディレクトリが同じリポジトリを共有していることがわかります!
これで、`../hotfix-dir` に移動すれば、即座にそのブランチの作業が開始できます。メインのディレクトリ(`my-project`)に影響を与えることは一切ありません。
—
3. 現場で震えるほど役立つ「極限の運用術」
ただ使うだけではもったいない。現場のプロが実践しているテクニックを紹介します。
A. 終わったら「掃除」を忘れない
worktreeで作成したディレクトリは、`rm -rf`で消してはいけません(Gitが混乱します)。不要になったら必ずGitに報告しましょう。
worktreeを削除
git worktree remove ../hotfix-dir
B. 複数プロジェクトを跨ぐときのディレクトリ構成
私はいつも、メインプロジェクトの親ディレクトリに `.worktrees` という隠しディレクトリを作って、そこに一時的なブランチを展開しています。
mkdir .worktrees
git worktree add .worktrees/feature-a feature-a
こうすると、メインのフォルダが散らかりません。
—
4. よくあるQ&A
- Q: ブランチの同期はどうなるの?
- A: 全てのworktreeは同じ `.git` ディレクトリを共有しています。`git fetch` や `git log` の結果は全ディレクトリで共通です。めちゃくちゃ効率的ですよね。
- Q: 同じブランチを複数のworktreeで開ける?
- A: 基本的にはNGです。Gitがファイルの競合を防ぐために止めてくれます。
—
最後に:コンテキストスイッチのコストをゼロへ
`git worktree`を使いこなすと、開発中の「思考の断絶」が劇的に減ります。
「あ、今のビルド待機中に、あのブランチの修正も確認しておこう」
そう思ったら、もう`stash`コマンドを叩く必要はありません。隣のディレクトリに移動するだけです。この「数秒の移動」が、あなたの集中力を守る最大の武器になります。
今日からあなたのワークフローに、ぜひ取り入れてみてください。きっと「もっと早く知りたかった!」と叫びたくなるはずです。
何か詰まったら、いつでも聞いてくださいね。応援しています!