FIG-067

Gitの3エリア — add と commit は別々の引っ越し

ツール 2026.06.26 公開 読了 約11分

git addgit commit の違いが曖昧なまま使っている――そんな人は多いはず。Gitを理解する鍵は、ファイルが置かれる3つのエリアを分けて見ることです。手元で編集するWorking Directory(作業ツリー)、コミット予定を並べるStaging Area(ステージ)、履歴を確定保存するRepository(リポジトリ)

Gitの操作は、要するにこのエリア間でファイルを移すことです。下の図1で 編集 → git add → git commit を押し、ファイルが左から右へ進む様子と、ステータスがどう変わるかを見てください。

3 AREAS — ファイルは add と commit で右へ進む
Working Directory 作業ツリー(編集中)
📄 app.js v1
git add
Staging Area 次のコミット候補
📄 app.js v1
git commit
Repository 確定した履歴(.git)
📦 app.js v1
クリーン:3エリアすべて同じ内容です
CLEAN
3エリアが同じ状態(クリーン)
まず「ファイルを編集」を押すと、Working Directory だけが新しくなり、他のエリアと差が出ます。そこから git add → git commit で、変更を右のエリアへ送ります。
図1 — 編集は作業ツリーだけを変える。add でステージへ、commit で履歴へ確定する

add と commit は、別々の引っ越し

多くの人がつまずくのが、「変更を保存する」操作が2段階に分かれている点です。git add は、作業ツリーの変更をStagingに登録するだけ。まだ履歴には残りません。git commit で、はじめてStagingの内容がRepositoryに確定保存されます。なぜ2段階かというと、「次のコミットに何を含めるか」を選べるようにするためです。複数の変更のうち、関係するものだけ add してコミットを意味のある単位に分けられます。

エリアを分けて考えると、ふだんのコマンドが「どこからどこへの移動か」で読めるようになります。git restore <file>Staging(やRepositoryのHEAD)の内容で作業ツリーを上書きして編集を捨てる操作――図1の「破棄」ボタンがこれです。git diff作業ツリーとStagingの差git diff --stagedStagingとRepositoryの差を見ています。3つの箱と、その間の矢印さえ頭にあれば、Gitの操作はぐっと見通しよくなります。

用語ミニ辞書
Working Directory
実際にファイルを編集している作業ツリー。エディタで触っているのはここ。
Staging Area
次のコミットに含める変更を並べる場所(indexとも)。git add で登録する。
Repository
コミットとして履歴が確定保存される領域(.git)。git commit で書き込まれる。
HEAD
いま自分がいるコミットを指す印。restore や diff の基準として使われる。

まとめ

GitはWorking Directory / Staging / Repositoryの3エリアと、その間を移す操作でできています。編集は作業ツリーだけを変え、git addでStagingへ、git commitでRepositoryへ確定――この一方向の流れが基本です。add と commit が別なのは、コミットの中身を選べるようにするため。3つの箱のイメージを持てば、restorediff といったコマンドも「どこを見て・どこへ動かすか」で理解できます。