Gitのステージング取り消し完全ガイド!git addを取り消す3つの方法

git

「あっ、間違ったファイルをgit addしちゃった…」

Gitでファイルをステージング(git add)した後、「このファイルは含めたくなかった」と気づくこと、ありますよね。

特にgit add .で全部追加してしまった時は焦ります。

でも安心してください!Gitにはステージングを取り消す方法がちゃんと用意されています。

今回は、git addの取り消し方法を状況別に詳しく解説していきます!

スポンサーリンク
  1. まず理解しておきたい:Gitの3つのエリア
    1. Gitの3つの領域
    2. ステージングの取り消しとは?
  2. 状況に応じた3つの取り消し方法
    1. 方法の選び方
  3. 【方法1】git restore –staged(最新・推奨)
    1. 基本的な使い方
    2. 実際の操作例
    3. なぜこの方法が推奨されるのか?
  4. 【方法2】git reset HEAD(従来の方法)
    1. 基本的な使い方
    2. HEADって何?
    3. 実際の操作例
    4. resetとrestoreの違い
  5. 【方法3】git rm –cached(初回コミット前)
    1. いつ使うのか?
    2. 基本的な使い方
    3. 実際の操作例
    4. なぜ初回だけ違うコマンド?
    5. 注意:コミット後に使うと危険!
  6. よくある使用シーン別の対処法
    1. シーン1:git add .で全部追加してしまった
    2. シーン2:.gitignoreの設定前にファイルを追加した
    3. シーン3:間違ったブランチでgit addした
    4. シーン4:一部のファイルだけコミットしたい
    5. シーン5:設定ファイルを間違えて追加した
  7. ステージング取り消しとファイル削除の違い
    1. ステージングの取り消し(今回の内容)
    2. ファイルの変更を破棄
    3. 対比表
  8. git statusでの確認方法
    1. ステージング済みのファイル
    2. ステージングしていない変更
    3. 追跡していないファイル
    4. 取り消し前後の比較
  9. トラブルシューティング
    1. Q1:git restore –stagedが使えない
    2. Q2:全部取り消したのにまだ表示される
    3. Q3:間違えてgit restoreを実行してしまった
    4. Q4:git rm –cachedしたらファイルが消えた
    5. Q5:特定のファイルだけ常に無視したい
  10. 便利なTips
    1. Tip1:エイリアスで短縮コマンドを作る
    2. Tip2:VSCodeでGUIで操作する
    3. Tip3:SourceTreeやGitKrakenなどのGUIツール
    4. Tip4:git addの前に.gitignoreを設定する
  11. まとめ:状況別コマンド早見表
    1. 基本的な取り消し方法
    2. シーン別の対処法
    3. よくある質問
    4. 覚えておきたいポイント

まず理解しておきたい:Gitの3つのエリア

ステージングの取り消しを理解するには、Gitの基本的な仕組みを知っておく必要があります。

Gitの3つの領域

Gitでは、ファイルは以下の3つのエリアを移動します:

①ワークツリー → ②ステージングエリア → ③リポジトリ
(作業ディレクトリ)  (インデックス)      (コミット履歴)

①ワークツリー(Working Tree)

  • 実際にファイルを編集する場所
  • あなたがコードを書いている場所

②ステージングエリア(Staging Area / Index)

  • コミット候補のファイルを置く場所
  • git addで追加される
  • 「まな板の上に材料を並べる」イメージ

③リポジトリ(Repository)

  • コミットされた履歴が保存される場所
  • git commitで保存される

ステージングの取り消しとは?

【現在の状態】
ワークツリー(変更あり) → ステージングエリア(git add済み)

【取り消し後】
ワークツリー(変更あり) ← ステージングエリア(空)

重要: ステージングを取り消しても、ファイルの変更内容は残ります

あくまで「コミット候補から外すだけ」なので、安心して使えます。

状況に応じた3つの取り消し方法

Gitのバージョンやコミット履歴の有無によって、使うコマンドが異なります。

方法の選び方

【判断フロー】
1. Git 2.23以降を使っている?
   YES → git restore --staged(推奨)
   NO → 2へ

2. 過去にコミットしたことがある?
   YES → git reset HEAD
   NO → git rm --cached

それでは、それぞれの方法を詳しく見ていきましょう!

【方法1】git restore –staged(最新・推奨)

Git 2.23以降で使える、最も推奨される方法です。

基本的な使い方

特定のファイルのステージングを取り消す

git restore --staged ファイル名

例: index.htmlのステージングを取り消す

git restore --staged index.html

複数のファイルを指定する

git restore --staged index.html style.css main.js

スペースで区切って複数指定できます。

すべてのステージングを取り消す

git restore --staged .

.(ドット)は「現在のディレクトリ以下すべて」という意味です。

実際の操作例

# ファイルを編集
echo "新しい内容" > index.html

# ステージングに追加
git add index.html

# 状態を確認
git status
# → Changes to be committed:
#      modified: index.html

# ステージングを取り消す
git restore --staged index.html

# 再度状態を確認
git status
# → Changes not staged for commit:
#      modified: index.html

なぜこの方法が推奨されるのか?

1. コマンド名が分かりやすい

  • restore(復元)という言葉から、何をするか想像しやすい
  • --stagedで「ステージングエリアを操作する」と明確

2. 安全性が高い

  • 特定の用途に特化している
  • 誤って履歴を書き換える危険性が低い

3. Gitの公式推奨

  • 新しいGitではgit statusでも推奨される
  • 今後のスタンダードになる

【方法2】git reset HEAD(従来の方法)

Git 2.23より前のバージョンや、従来の方法に慣れている方向けです。

基本的な使い方

すべてのステージングを取り消す

git reset HEAD

または単に:

git reset

HEADは省略可能です。

特定のファイルのステージングを取り消す

git reset HEAD ファイル名

例:

git reset HEAD index.html

複数ファイルを指定する

git reset HEAD index.html style.css

ディレクトリごと取り消す

git reset HEAD src/

HEADって何?

HEADは「現在のコミット」を指す特別な名前です。

git reset HEADは「現在のコミットの状態にリセットする」という意味になります。

実際の操作例

# 複数のファイルをステージング
git add index.html style.css main.js

# 状態確認
git status
# → Changes to be committed:
#      modified: index.html
#      modified: style.css
#      modified: main.js

# すべてのステージングを取り消す
git reset HEAD

# 再確認
git status
# → Changes not staged for commit:
#      modified: index.html
#      modified: style.css
#      modified: main.js

resetとrestoreの違い

git reset:
- 多機能で強力
- ステージング以外にもコミット履歴の操作も可能
- 使い方を間違えると危険

git restore:
- ステージング操作に特化
- 用途が明確で安全
- 新しいバージョンでの推奨方法

【方法3】git rm –cached(初回コミット前)

まだ一度もコミットしていない状態(git init直後)で使います。

いつ使うのか?

【この状況】
1. git initでリポジトリを作成
2. git addでファイルを追加
3. まだ一度もgit commitしていない

【この時に使う】
git rm --cached

基本的な使い方

特定のファイルを取り消す

git rm --cached ファイル名

例:

git rm --cached secret.txt

すべてのファイルを取り消す

git rm --cached -r .

-rオプションは「再帰的に」という意味で、ディレクトリ内すべてを対象にします。

複数ファイルを指定する

git rm --cached file1.txt file2.txt

実際の操作例

# 新しいリポジトリを作成
git init

# ファイルを追加
git add index.html style.css

# 状態確認
git status
# → Changes to be committed:
#      new file: index.html
#      new file: style.css

# index.htmlだけ取り消す
git rm --cached index.html

# 再確認
git status
# → Changes to be committed:
#      new file: style.css
# → Untracked files:
#      index.html

なぜ初回だけ違うコマンド?

初回コミット前はHEAD(現在のコミット)が存在しません。

そのため、git reset HEADは使えず、代わりにgit rm --cachedを使います。

注意:コミット後に使うと危険!

⚠️ 重要: すでにコミットしたファイルにgit rm --cachedを使うと、次のコミットでそのファイルが削除されます!

# ❌ 危険な例(コミット後に実行)
git rm --cached important.txt
git commit -m "commit"
# → important.txtがリポジトリから削除される

コミット後は必ずgit restore --stagedgit reset HEADを使いましょう。

よくある使用シーン別の対処法

実際の開発でよくあるケースと、その対処法を見ていきましょう。

シーン1:git add .で全部追加してしまった

# 全部ステージングしてしまった
git add .

# 特定のファイルだけ取り消す
git restore --staged config.json secret.env

# または特定のファイル以外すべて取り消す
git restore --staged .
git add index.html style.css  # 必要なものだけ再度追加

シーン2:.gitignoreの設定前にファイルを追加した

# 状況:node_modules/をステージングしてしまった

# ステージングを取り消す
git restore --staged node_modules/

# .gitignoreに追加
echo "node_modules/" >> .gitignore

# .gitignoreをステージング
git add .gitignore

シーン3:間違ったブランチでgit addした

# 現在のブランチを確認
git branch
# → * feature-a (間違えた!)

# ステージングを取り消す
git restore --staged .

# 正しいブランチに移動
git checkout feature-b

# あらためてステージング
git add .

シーン4:一部のファイルだけコミットしたい

# たくさんのファイルを編集した
# でも今回は一部だけコミットしたい

# まず全部ステージング
git add .

# 不要なものを取り消す
git restore --staged test.html debug.js

# 状態確認
git status

# コミット
git commit -m "必要な変更のみコミット"

シーン5:設定ファイルを間違えて追加した

# 機密情報が含まれるファイルを追加してしまった
git add config/database.yml

# すぐに取り消す
git restore --staged config/database.yml

# .gitignoreに追加
echo "config/database.yml" >> .gitignore
git add .gitignore

ステージング取り消しとファイル削除の違い

混同しやすいので、しっかり区別しておきましょう。

ステージングの取り消し(今回の内容)

git restore --staged index.html

何が起こる:

  • ステージングエリアから除外される
  • ファイルの変更内容は残る
  • ワークツリーは影響を受けない

結果:

Before: 変更あり(ステージング済み)
After:  変更あり(ステージング前)

ファイルの変更を破棄

git restore index.html

何が起こる:

  • ファイルの変更内容が失われる
  • 最後のコミットの状態に戻る
  • 元に戻せない!

結果:

Before: 変更あり
After:  変更なし(最後のコミットと同じ)

対比表

コマンドステージングファイルの変更危険度
git restore --staged取り消される残る安全
git restore破棄される危険
git reset HEAD取り消される残る安全
git reset --hard取り消される破棄される非常に危険

git statusでの確認方法

ステージングの状態を確認するのはgit statusコマンドです。

ステージング済みのファイル

git status

結果:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   index.html
        new file:   style.css

Changes to be committed:の下に表示されるファイルがステージング済みです。

ステージングしていない変更

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   main.js

Changes not staged for commit:の下がステージングしていない変更です。

追跡していないファイル

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        new-file.txt

Untracked files:は新規作成したファイルで、まだGitの管理下にないファイルです。

取り消し前後の比較

# ステージング前
git add index.html
git status
# → Changes to be committed:
#      modified: index.html

# 取り消し後
git restore --staged index.html
git status
# → Changes not staged for commit:
#      modified: index.html

トラブルシューティング

よくある問題と解決方法です。

Q1:git restore –stagedが使えない

症状:

git restore --staged index.html
# → git: 'restore' is not a git command

原因: Gitのバージョンが古い(2.23より前)

解決方法:

# 代わりにgit resetを使う
git reset HEAD index.html

# またはGitをアップデート
git --version  # バージョン確認

Q2:全部取り消したのにまだ表示される

症状:

git restore --staged .
git status
# → まだファイルが表示される

原因: ステージングは取り消されたが、ファイル自体は変更されたまま

解決方法:

# これは正常です!
# 「Changes to be committed」が「Changes not staged for commit」に変わっていればOK

Q3:間違えてgit restoreを実行してしまった

症状:

# --stagedを付け忘れた!
git restore index.html
# → ファイルの変更が消えた!

原因: --stagedなしのgit restoreは変更を破棄する

解決方法:

# エディタで「元に戻す」(Ctrl+Z / Cmd+Z)が使えれば戻せる
# それ以外は残念ながら復元不可能...

# 予防策:
# - こまめにコミットする
# - 重要な作業前はブランチを作る

Q4:git rm –cachedしたらファイルが消えた

症状:

# コミット後にgit rm --cachedを実行
git rm --cached important.txt
ls
# → ファイルがない!

原因: コミット後のファイルにgit rm --cachedは使えない

解決方法:

# まだコミットしていなければ:
git reset HEAD important.txt

# すでにコミットしてしまった場合:
git revert HEAD  # コミット自体を取り消す

Q5:特定のファイルだけ常に無視したい

症状: 毎回同じファイルのステージングを取り消している

解決方法: .gitignoreに追加する

# .gitignoreに追加
echo "config/local.yml" >> .gitignore
echo "*.log" >> .gitignore
echo "node_modules/" >> .gitignore

# すでにステージングされている場合は取り消す
git restore --staged config/local.yml

# .gitignore自体をコミット
git add .gitignore
git commit -m ".gitignoreを追加"

便利なTips

Tip1:エイリアスで短縮コマンドを作る

毎回長いコマンドを打つのは面倒ですよね。

# 短縮コマンドを設定
git config --global alias.unstage 'restore --staged'

# これで使える
git unstage index.html
# ↑ git restore --staged index.html と同じ

Tip2:VSCodeでGUIで操作する

VSCodeのSource Controlビューでは、GUIでステージングを取り消せます。

1. VSCodeの左サイドバーでSource Controlアイコンをクリック
2. 「Staged Changes」にあるファイルの「-」ボタンをクリック
3. ステージングが解除される

Tip3:SourceTreeやGitKrakenなどのGUIツール

GUIツールを使えば、クリックでステージングを操作できます。

SourceTree:

1. ファイルステータスを表示
2. ステージング済みのファイルを選択
3. 「Unstage」ボタンをクリック

GitKraken:

1. Unstage Files領域を表示
2. ファイルをドラッグ&ドロップで移動

Tip4:git addの前に.gitignoreを設定する

そもそもステージングの取り消しを減らすコツです。

# プロジェクト開始時にまず.gitignoreを作成
cat > .gitignore << EOF
node_modules/
*.log
.env
.DS_Store
EOF

# それからgit add
git add .

まとめ:状況別コマンド早見表

最後に、すぐに使える早見表をまとめます。

基本的な取り消し方法

状況コマンド説明
Git 2.23以降(推奨)git restore --staged ファイル名最も分かりやすい
Git 2.23以降(全部)git restore --staged .すべて取り消す
Git 2.22以前git reset HEAD ファイル名従来の方法
Git 2.22以前(全部)git reset HEADすべて取り消す
初回コミット前git rm --cached ファイル名初回専用
初回コミット前(全部)git rm --cached -r .すべて取り消す

シーン別の対処法

シーン対処法
git add .で全部追加git restore --staged .
必要なものだけ再度git add
設定ファイルを誤追加git restore --staged 設定ファイル
.gitignoreに追加
一部だけコミットしたいgit restore --staged 不要なファイル
間違ったブランチで作業git restore --staged .
正しいブランチに移動
git add .

よくある質問

Q:ファイルの変更内容は消える?
A:消えません!ステージングから外れるだけです。

Q:どのコマンドを使えばいい?
A:Git 2.23以降ならgit restore --stagedを使いましょう。

Q:間違えて実行しても戻せる?
A:ステージングの取り消しは安全に戻せます。ファイルの変更は残っているので。

Q:コミット後でも使える?
A:使えます。ただしgit rm --cachedはコミット後は使わないでください。

覚えておきたいポイント

  1. ステージングの取り消しは安全
  • ファイルの変更内容は残る
  • 何度でもやり直せる
  1. 推奨コマンドはgit restore --staged
  • 分かりやすい
  • 安全性が高い
  • 公式推奨
  1. git statusで必ず確認
  • 取り消す前に確認
  • 取り消した後も確認
  • こまめに確認する習慣を
  1. 間違えやすいコマンドに注意
  • git restore(–stagedなし)は変更を破棄
  • git rm --cachedはコミット後は危険

Gitのステージング取り消し、理解していただけましたでしょうか?

最初は難しく感じるかもしれませんが、実際に試してみれば意外と簡単です。

練習用のリポジトリを作って、色々な取り消し方を試してみてくださいね!

安心してgit addを使えるようになると、Gitがもっと便利になりますよ!

コメント

タイトルとURLをコピーしました