Gitを使っていて「あ、間違ったファイルをaddしちゃった!」という経験、ありませんか?
実は、この悩みは開発者なら誰もが一度は通る道なんです。git addコマンドでステージングエリアに追加したファイルを、コミット前に取り消したい場面は意外と多いもの。
この記事では、git addを安全に取り消す方法を、初心者の方にも分かりやすく解説していきます。複数の方法があるので、状況に応じて使い分けられるようになりましょう。
git addとステージングエリアの基本
まずは、git addが何をしているのか簡単におさらいしておきましょう。
git addコマンドは、変更したファイルを「ステージングエリア(索引)」という場所に登録するコマンドです。ステージングエリアは、次回のコミットに含める予定のファイルを一時的に保管しておく場所と考えてください。
作業の流れはこんな感じです:
- ファイルを編集する(作業ディレクトリで変更)
git addでステージングエリアに追加git commitでリポジトリに記録
つまり、git addの取り消し = ステージングエリアからファイルを除外するということなんですね。
【推奨】git restore –stagedで取り消す方法
現在のGitで最も推奨されている方法が、git restore --stagedコマンドです。Git 2.23(2019年)以降で使えるようになりました。
基本的な使い方
特定のファイルを取り消す場合:
git restore --staged ファイル名
すべてのステージング済みファイルを取り消す場合:
git restore --staged .
実際の操作例
例えば、config.txtというファイルを間違えてaddしてしまった場合を見てみましょう。
# まず現在の状態を確認
$ git status
Changes to be committed:
modified: index.html
modified: config.txt ← これを取り消したい
# config.txtのみ取り消し
$ git restore --staged config.txt
# 結果を確認
$ git status
Changes to be committed:
modified: index.html
Changes not staged for commit:
modified: config.txt ← ここに移動した
このコマンドの良いところは、コマンド名から意味が分かりやすいこと。「staged(ステージ済み)の状態をrestore(復元)する」と理解できますよね。
git resetを使った取り消し方法
Git 2.23より前から使われている方法がgit resetコマンドです。今でも問題なく使えるので、覚えておいて損はありません。
基本的な使い方
特定のファイルを取り消す場合:
git reset ファイル名
または
git reset HEAD ファイル名
すべてのファイルを取り消す場合:
git reset
または
git reset HEAD
実際の操作例
# 複数ファイルをaddした状態
$ git status
Changes to be committed:
new file: script.js
modified: style.css
# script.jsのみ取り消し
$ git reset script.js
# 確認
$ git status
Changes to be committed:
modified: style.css
Untracked files:
script.js ← 新規ファイルは「Untracked」になる
git resetとgit reset HEADは同じ動作をします。どちらを使っても大丈夫ですよ。
複数ファイルを一度に取り消す方法
複数のファイルをまとめて取り消したい場合も、よくある状況です。いくつかの方法を見ていきましょう。
スペース区切りで複数ファイルを指定
git restore --staged file1.txt file2.txt file3.txt
ワイルドカードを使う
すべてのCSSファイルを取り消す:
git restore --staged *.css
特定のディレクトリ内のファイルをすべて取り消す:
git restore --staged src/
すべてのステージング済みファイルを一括で取り消す
# 方法1:git restore
git restore --staged .
# 方法2:git reset
git reset
この「すべて取り消し」は、間違えてgit add .してしまった時に便利です。
初回コミット前の特別な対応
リポジトリを作成したばかりで、まだ一度もコミットしていない状態では、少し対応が変わります。
git rm –cachedを使う
初回コミット前(コミット履歴がゼロの状態)では、git reset HEADがエラーになることがあります。これは、「HEAD」が最新のコミットを指すのに、コミットがまだ存在しないからです。
この場合は、git rm --cachedコマンドを使いましょう。
特定のファイルを取り消す:
git rm --cached ファイル名
すべてのファイルを取り消す:
git rm --cached -r .
実際の操作例
# 新規リポジトリで初回add
$ git init
$ touch sample.txt
$ git add sample.txt
$ git status
Changes to be committed:
new file: sample.txt
# resetを試すとエラーになる
$ git reset HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path
# 正しい方法:git rm --cached
$ git rm --cached sample.txt
$ git status
Untracked files:
sample.txt ← 取り消し成功
ただし、現在のGitバージョン(1.8.2以降)では、git resetだけでも初回コミット前に使えるようになっています。状況に応じて使い分けてください。
絶対に避けるべき操作
git addの取り消しで、絶対に使ってはいけないコマンドがあります。
git reset –hardは危険
# ❌ これは絶対にダメ
git reset --hard
このコマンドは、ステージングエリアだけでなく、作業ディレクトリの変更内容も完全に削除してしまいます。つまり、編集した内容が全部消えてしまうんです。
元に戻す方法はないので、本当に注意が必要です。ローカル環境がごちゃごちゃになって、すべてをクリーンな状態に戻したい時だけ、慎重に使用してください。
取り消し後の状態を確認する方法
git addを取り消した後は、必ずgit statusで状態を確認する習慣をつけましょう。
git status
このコマンドで、以下の情報が分かります:
- Changes to be committed → コミット予定のファイル(ステージング済み)
- Changes not staged for commit → 変更済みだがステージングされていないファイル
- Untracked files → Git管理外の新規ファイル
取り消したファイルが正しい場所に移動しているか、必ず確認してくださいね。
よくある質問と回答
ファイルの変更内容は消えませんか?
安心してください。git restore --stagedやgit resetでは、ファイルの変更内容は保持されます。
ステージングエリアから除外されるだけで、作業ディレクトリのファイルはそのまま残ります。再度編集したり、もう一度addし直したりできますよ。
間違えて全部取り消してしまった場合は?
全ファイルを取り消してしまっても、慌てる必要はありません。もう一度addすればOKです。
# すべてのファイルを再度add
git add .
# 変更済みファイルのみadd
git add -u
新規ファイルと既存ファイルで動作は違いますか?
はい、少し違います。
既存ファイル(すでにリポジトリに登録済み)の場合:
取り消すと「Changes not staged for commit」になります。
新規ファイル(まだリポジトリに未登録)の場合:
取り消すと「Untracked files」になります。
どちらも変更内容は保持されているので、心配いりません。
GUIツールでの操作方法
コマンドラインが苦手な方は、GUIツールを使うのもおすすめです。
VS Codeでの操作
- 左側の「ソース管理」アイコンをクリック
- 「ステージされた変更」セクションで、取り消したいファイルを探す
- ファイル名の右側の「−」ボタンをクリック
これだけで、git addを取り消せます。
Sourcetreeでの操作
- 「File Status」タブを開く
- 「Staged files」エリアで対象ファイルを選択
- 右クリックして「Unstage」を選択
直感的に操作できるので、初心者の方にはGUIツールから始めるのも良いでしょう。
まとめ
git addの取り消し方法をまとめると、以下のようになります。
通常のケース(コミット履歴がある場合):
- 推奨:
git restore --staged ファイル名 - 従来の方法:
git reset ファイル名
初回コミット前のケース:
git rm --cached ファイル名- または新しいGitでは
git resetも使用可能
重要なポイント:
- ファイルの変更内容は保持される(安心して取り消せる)
git reset --hardは避ける(変更が消える)- 必ず
git statusで確認する習慣をつける
git addの取り消しは、完全に可逆的な操作です。間違えてもやり直せるので、安心して試してみてください。
慣れてくれば、状況に応じて最適なコマンドを選べるようになりますよ。

コメント