3秒でわかる
Git で、次のコミットに含める変更だけを選んで置いておく中間の置き場。まとめて直した作業を、意味の揃った単位に分けて記録できます。
もう少し詳しく
どういうものか
ステージングは、Git がコミットの前に用意している中間領域です。ファイルを編集しただけでは記録されず、git add でステージに上げたものだけが git commit で履歴に入ります。
作業ツリー ---git add---> ステージ ---git commit---> <a href="/glossary/repository" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">リポジトリ</a>
(編集中) (次に記録する分) (確定した履歴)今どこに何があるかは git status で見えます。
git add src/price.js
git status
git commit -m "税込表示の計算を修正"なぜ必要か
1 回の作業で複数の変更をしてしまうことは普通に起きます。バグを直すついでに、無関係なタイポも直した、という状況です。全部まとめてコミットすると、後で「この修正だけ取り消したい」ができません。ステージがあると、直したファイルのうち一部だけを選んで、意味の揃った単位でコミットできます。
具体例
同じファイルの中でも、部分ごとに選べます。
git add -p src/app.js変更の塊ごとに「これを含めるか」と聞かれるので、y と n で選びます。バグ修正の 5 行だけを先にコミットし、実験中のコードは手元に残す、といった分け方ができます。
ステージから降ろしたいときは下記のとおりです。
git restore --staged src/app.js # 編集内容は残したままステージから外すつまずきやすいところ
git add . を癖にすると、意図しないファイルまで入ります。ビルド成果物や .env が履歴に入ると、後から消しても過去のコミットには残り続けます。.gitignore を先に整え、add の前に git status を見る習慣で防げます。
もうひとつ、git add した後にさらに編集した分は、そのままではコミットされません。同じファイルが「ステージ済み」と「未ステージ」の両方に出ている状態になり、add をやり直す必要があります。コミット前に git diff --staged で、実際に記録される内容を見る癖を付けると防げます。
似た用語との違い
同じ言葉ですが別物です。文脈がバージョン管理か、デプロイ先かで読み分けます。
覚え方
ステージは舞台袖です。出演が決まった変更だけを袖に集め、そろったところで舞台 (コミット) に出します。袖に上げただけなら、いつでも引っ込められます。