この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:T
更新日時:2026-06-11 07:07:02

タイトル: 新規ファイル/ディレクトリをインデックスに登録
SEOタイトル: git add 完全ガイド (ステージング)

この記事の要点
  • git add は変更を「ステージング領域 (index)」に乗せるコマンド。commit 対象はステージのみ
  • git add file 個別、git add . カレント以下、git add -A 削除も含めて全部
  • git add -p でハンク(差分の塊)単位で選択 → 関係ない変更を分けてコミット
  • ステージ確認: git diff --cached または git status
  • 取り消し: git restore --staged file(Git 2.23+) / 旧 git reset HEAD file

git add とは(ステージング領域)

Git のコミットは 3 つの領域を行き来します:

[Working Tree]      [Staging (Index)]      [Repository]
  編集中ファイル → git add →   ステージ   → git commit → コミット履歴
                    ↑
              git restore --staged で戻る

git add は "何を次のコミットに含めるか" を選ぶ作業です。「全ての変更を勝手にコミットする」のではなく、意図的に選んでコミットできるのが Git の強みです。

基本オプション一覧

コマンド対象削除の扱い
git add file.txt個別ファイル明示すれば削除も
git add dir/ディレクトリ配下削除も含む
git add .カレント以下の全変更削除も含む(Git 2.0+)
git add -A / --allリポジトリ全体の全変更削除も含む
git add -u / --update追跡中ファイルのみ変更・削除含む。新規は無視
git add -p対話的にハンク選択選択次第
git add -i対話モード選択次第
git add -nドライラン(何が add されるか確認のみ)

使用例

# 個別ファイル
git add README.md

# 複数ファイル
git add README.md src/Login.php

# パターン
git add src/*.php
git add '**/*.test.js'

# カレント以下全て
git add .

# 削除されたファイルも含めて全部
git add -A

# 追跡中ファイルのみ(新規は無視)
git add -u

# 確認だけ(ドライラン)
git add -n .

パッチモード(-p)でハンク選択

1つのファイルに「機能追加」と「無関係なフォーマット修正」が混ざっているとき、機能追加だけをステージするために使います。「1コミット1目的」の習慣を支える機能。

git add -p

# Git が差分をハンク(塊)ごとに見せて、それぞれ採用/却下を聞く
# 操作キー:
#   y - このハンクをステージ
#   n - 飛ばす
#   q - 終了
#   s - ハンクをさらに小さく分割
#   e - ハンクを手動編集
#   ? - ヘルプ

ステージ状態の確認

# サマリー
git status

# ステージ済の差分を見る(次回コミットに含まれる内容)
git diff --cached
git diff --staged    # ↑のエイリアス

# 未ステージの差分(ワーキングツリー vs ステージ)
git diff

# 全部(ステージ + 未ステージ)
git diff HEAD

ステージから戻す(unstage)

「間違えて add してしまった」場合、ファイル内容は変えずにステージから外せます。

# Git 2.23+ 推奨
git restore --staged file.txt

# 全部 unstage
git restore --staged .

# 旧来の書き方(今でも動く)
git reset HEAD file.txt
git reset HEAD       # 全部

# 「ファイルの中身も最新コミット状態に戻す」(破壊的)
git restore file.txt
# 旧: git checkout -- file.txt

.gitignore は git add で尊重される

git add ..gitignore に書かれたパターンを自動でスキップします。ただし明示的なパス指定なら無視ルールを上書きできます:

# .gitignore に *.log 指定済
git add .              # → app.log はスキップされる
git add app.log        # → スキップされる(警告)
git add -f app.log     # → 強制 add(.gitignore を無視)

git status の見方

$ git status
On branch main
Changes to be committed:                    ← ステージ済(緑)
  (use "git restore --staged ..." to unstage)
        modified:   src/Login.php
        new file:   src/Register.php

Changes not staged for commit:              ← 未ステージ(赤)
  (use "git add ..." to update what will be committed)
        modified:   README.md

Untracked files:                            ← 未追跡(新規・赤)
  (use "git add ..." to include in what will be committed)
        config/local.php

add 後にファイルを更に編集したら

add 後に同じファイルを編集すると、ステージ済のスナップショットと現在のファイルが食い違います。そのままコミットすると add 時点の内容が記録されます。

echo "v1" > a.txt
git add a.txt        # ← v1 がステージ
echo "v2" > a.txt    # ← ワーキングツリーは v2
git diff             # → v1 と v2 の差分(未ステージ部分)
git diff --cached    # → v1 がステージされている
git commit -m "..."  # → v1 がコミット(v2 は次回コミット対象)

# v2 も入れたければ再 add
git add a.txt
git commit --amend --no-edit   # 直前コミットに混ぜる

IDE での統合

  • VS Code: Source Control パネルの "+" ボタンでステージ。行単位ステージも可能
  • JetBrains IDE: 「Changes」ビューで右クリック → Add to VCS
  • GitHub Desktop: チェックボックスで選択
  • SourceTree: 「Unstaged」から「Staged」へ移動

FAQ

Q: git add .git add -A の違いは?
A: Git 2.0 以降はほぼ同じです(削除も含む)。違いは作業対象範囲: .はカレントディレクトリ以下、-Aはリポジトリ全体。

Q: add せずに直接コミットしたい
A: git commit -am "..." で追跡中ファイルの変更を一括 add + commit できます。新規ファイルは含まれません。

Q: バイナリファイルや巨大ファイルは?
A: そのまま add 可能ですがリポジトリが肥大化します。動画・画像・モデルファイルなどは Git LFS の導入を検討。