| この記事の要点 |
|
インデックス(ステージング領域)とは
Git では、ファイルの変更は次の 3 つの場所を順に移動します。
| 場所 | 内容 | 移動させるコマンド |
|---|---|---|
| 作業ツリー | 実際に編集しているファイル | — |
| インデックス | 次のコミットに含める内容(ステージ済み) | git add |
| リポジトリ(HEAD) | コミット済みの履歴 | git commit |
git commit は作業ツリーではなくインデックスの内容をコミットします。そのため、コミット前に「インデックスに何が登録されているか」を確認することで、入れ忘れや余計なファイルの混入を防げます。本稿は git の index に登録している状態を確認する方法を説明します。
基本: git status で確認する
以下のコマンドを実行します。
$ git status
ブランチ master
コミット予定の変更点:
(use "git restore --staged <file>..." to unstage)
new file: file3
modified: file1
コミット予定に含まれていない変更:
(use "git add <file>..." to update what will be committed)
modified: file2
追跡されていないファイル:
memo.txt
表示は 3 つのブロックに分かれます。
- コミット予定の変更点(Changes to be committed): インデックスに登録済みの変更。次の
git commitに入る - コミット予定に含まれていない変更(Changes not staged for commit): 編集したがまだ
git addしていない変更 - 追跡されていないファイル(Untracked files): Git がまだ管理していない新規ファイル
同じファイルが上下両方に出ることがあります。これは「一度 add したあとにさらに編集した」状態で、add した時点の内容だけがコミットされます。最新の内容を入れたいなら、もう一度 git add します。
Git のバージョンによっては、取り消し方法の案内が git reset HEAD <file> と表示されます(Git 2.23 より前)。どちらも「ステージを取り消す」という意味です。
短く確認する: git status -s
$ git status -s
A file3
M file1
M file2
?? memo.txt
先頭 2 文字のうち、左がインデックスの状態、右が作業ツリーの状態です。
| 表示 | 意味 |
|---|---|
| A(左) | 新規ファイルをステージ済み |
| M(左) | 変更をステージ済み |
| M(右) | 変更したがステージしていない |
| D | 削除(左ならステージ済み) |
| R | リネーム(ステージ済み) |
| ?? | 未追跡ファイル |
| MM | ステージ後にさらに変更あり |
ステージした内容の差分を見る: git diff --cached
git status はファイル名しか表示しません。どの行を変更してステージしたかを見るには次のコマンドを使います。
# インデックスと HEAD(直前のコミット)の差分 = 次にコミットされる内容
git diff --cached
git diff --staged # 同じ意味
# ファイル名だけ
git diff --cached --name-only
# ファイル名と状態(A/M/D)
git diff --cached --name-status
# 変更行数の統計
git diff --cached --stat
オプションなしの git diff は「作業ツリーとインデックスの差分」、つまりまだステージしていない変更を表示します。混同しやすいので注意してください。
インデックスの中身そのものを見る: git ls-files
インデックスには、変更分だけでなく追跡中の全ファイルが登録されています。一覧は次のコマンドで確認できます。
# インデックスに登録されている全ファイル
git ls-files
# モード・オブジェクト ID・ステージ番号付き
git ls-files -s
git ls-files -s のステージ番号は通常 0 です。マージで競合が起きているファイルは 1〜3 の番号で複数行表示されるため、競合の確認にも使えます。
間違えてステージしたときの取り消し
# ステージを取り消す(作業ツリーの変更は残る)
git restore --staged file3
# Git 2.23 より前
git reset HEAD file3
# 追跡自体をやめる(ファイルは残す)
git rm --cached secret.env
git rm --cached は追跡をやめるコマンドなので、単に「add を取り消したい」場合は git restore --staged を使います。
よくある質問
Q. 「git add .」で何が入ったか一覧で確認したい
A. git diff --cached --name-status が便利です。不要なファイルが入っていたら git restore --staged で外し、.gitignore に追加します。
Q. コミット直前に最終確認する習慣をつけたい
A. git commit -v を使うと、コミットメッセージ入力画面にステージ済みの差分が表示されます。
関連
- git diff の使い方(作業ツリー/インデックス/コミット間/ブランチ間の差分抽出)
- バージョン管理システム完全ガイド
- NetBeansでGitを導入する手順|Clone・Commit・Push・SSH鍵設定
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38