gitのインデックスとは
gitは分散型バージョン管理システムで、作業ツリー(ワークディレクトリ)とリポジトリ(履歴)に加えて、インデックス(ステージングエリア)という中間領域を持ちます。このインデックスは、次にコミットする内容を一時的に保存する領域です。
インデックスの役割
- 作業ツリーで変更されたファイルを「次のコミットに含める」かどうかを選択できる。
- 複数の変更を論理的にグループ化し、粒度の細かいコミットを作成できる。
- コミット前に差分を確認したり、部分的にステージングしたりできる。
インデックスを操作する主なコマンド
- git add <path> – ファイルをインデックスに追加(ステージ)する。
- git reset <path> – インデックスからファイルを除外し、作業ツリーの変更だけに戻す。
- git restore –staged <path> –
git resetと同等だが、意図がステージ解除であることを明示する。 - git commit – インデックスにある全ての変更を新しいコミットとしてリポジトリに保存する。
インデックスの内部構造(簡易説明)
インデックスはリポジトリ内部の .git/index ファイルに保存され、各エントリは以下の情報を持ちます。
- ファイルパス
- SHA-1(または SHA-256)ハッシュ
- ファイルモード(実行権限など)
- ステータスフラグ(新規、変更、削除)
実際の使用例
# 作業ツリーでファイルを編集
vim src/app.js
# 変更をインデックスに追加(ステージング)
git add src/app.js
# ステージされた内容を確認
git status
# さらに別のファイルだけをステージしないでコミットしたい場合
git add README.md
git commit -m "Update app.js and add README"
# ステージを解除したいとき
git reset src/app.js # または git restore --staged src/app.js
まとめ
インデックスは「次に何をコミットするか」を制御する重要な領域です。git add でステージし、git commit で確定する流れを理解すれば、細やかな履歴管理や安全なコードレビューが可能になります。