Gitを使い始めると、git add、git commit、git status の意味が混ざりやすいです。原因の多くは、Gitの中にある3つの場所を区別できていないことです。
一言でいうと
Gitでは、変更は「作業ツリー」から「ステージ」へ移り、最後に「リポジトリ」へ記録されます。
3つの場所
| 場所 | 役割 |
|---|---|
| 作業ツリー | 実際にファイルを編集する場所 |
| ステージングエリア | 次のコミットに入れる変更を準備する場所 |
| リポジトリ | コミット履歴を保存する場所 |
この3つを理解すると、git status の表示がかなり読みやすくなります。
作業ツリー
作業ツリーは、普段エディタで開いて編集しているファイル群です。
たとえば、README.md を編集した直後、その変更はまだ履歴には記録されていません。作業ツリーに変更があるだけです。
git status
ここで modified のように表示されるファイルは、作業ツリーで変更されたファイルです。
ステージングエリア
ステージングエリアは、次のコミットに入れる変更を選ぶ場所です。
git add README.md
git add を実行すると、作業ツリーの変更がステージに載ります。
git addは「保存」ではなく、「次のcommitに含める候補へ入れる」操作です。
リポジトリ
リポジトリは、コミット履歴を保存する場所です。
git commit -m "docs: update README"
git commit を実行すると、ステージングエリアにある変更が履歴として記録されます。
流れで見る
作業ツリー
↓ git add
ステージングエリア
↓ git commit
リポジトリ
この流れを覚えると、Git操作の多くが整理できます。
よくある誤解
| 誤解 | 実際 |
|---|---|
git add で履歴に保存される | 履歴になるのは git commit です |
git commit は全変更を記録する | ステージされた変更だけを記録します |
git status はエラー表示 | 現在地を教える確認コマンドです |
git push はcommitと同じ | commitをリモートへ送る操作です |
まとめ
Gitには、作業ツリー、ステージングエリア、リポジトリという3つの場所があります。編集しただけでは履歴にならず、git add でステージし、git commit でリポジトリに記録します。迷ったら、まず git status で今どの場所に変更があるか確認します。