Git を使っていると、こんな疑問にぶつかりませんか?
- ブランチって結局何?
- 「別のワークツリーにあります」ってエラーが出たけど意味がわからない
- ブランチとワークツリーは同じもの?
この記事では、Git 初心者が最初につまずきやすい「ブランチ」と「ワークツリー」の違いを、
専門用語を極力使わず、実務イメージで解説します。
まず結論:ブランチとワークツリーは別物
最初に結論です。
| 用語 | 役割 |
|---|---|
| ブランチ | 「どの履歴(コミット)を指しているか」という目印 |
| ワークツリー | そのブランチを実際のファイルとして展開しているフォルダ |
つまり、
- ブランチ=概念・参照
- ワークツリー=物理的な作業フォルダ
です。
ブランチとは何か(超シンプルに)
ブランチはよく「作業の分岐」と説明されますが、初心者には少し抽象的です。
もっと単純に言うと、
ブランチとは「今どのコミットを見ているか」を示すラベル
です。
- main ブランチ
- feature/login ブランチ
- hotfix ブランチ
これらはすべて
「このブランチは、このコミットを指していますよ」
という**ポインタ(参照)**にすぎません。
👉 ブランチ自体にはファイルは入っていません。
ワークツリーとは何か
ワークツリーは、
Git の履歴を、実際のファイルとして展開している作業用フォルダ
です。
あなたが普段触っているこの状態👇
- VSCode でファイルを編集する
-
git statusを打つ -
npm run devを実行する
これはすべて ワークツリー上での作業です。
重要ポイント
ワークツリーがある = フォルダが物理的に存在する
普通の Git 利用ではどうなっている?
通常の Git 利用では、こうなっています。
my-project/
├─ .git/
├─ src/
├─ package.json
- このフォルダが 1つのワークツリー
git checkout maingit checkout feature/a
と切り替えるたびに、
同じフォルダの中身が書き換わるだけです。
初心者のうちは、この形しか見ないので
「ブランチ=フォルダ」だと誤解しがちです。
git worktree を使うと何が変わる?
git worktree を使うと、こうなります。
my-project/ ← main ブランチのワークツリー
my-project-feature/ ← feature ブランチのワークツリー
ポイントは:
- 1つの Git リポジトリ(.git)
- 複数のワークツリー(別フォルダ)
- それぞれが別ブランチを同時に使う
という構造です。
「別のワークツリーにあります」エラーの正体
このエラーはこういう意味です。
「そのブランチは、すでに別フォルダのワークツリーで使われています」
Git は基本的に、
- 1ブランチ=1ワークツリー
というルールを守ります。
なぜなら、
- 同じブランチを
- 複数フォルダで
- 同時に編集
すると、履歴が壊れやすいからです。
状況確認コマンド(必須)
今どのブランチが、どのフォルダで使われているかは、これで確認できます。
git worktree list
出力例:
/path/to/my-project [main]
/path/to/my-project-feature [feature/login]
初心者が覚えるべき整理フレーズ
混乱したら、この一文を思い出してください。
ブランチは履歴の目印、ワークツリーは作業フォルダ
まとめ
- ブランチは「どの履歴を見るか」という参照
- ワークツリーは「実際に作業するフォルダ」
-
git worktreeを使うと、ブランチごとに別フォルダを持てる - 「別のワークツリーにあります」はエラーではなく状態の説明
Git は概念が分かれると一気に楽になります。