git addを取り消したい!状況別の完全解決ガイド

git

「あ、間違えてgit addしちゃった!」

そんな経験、ありませんか?大丈夫です。git addは簡単に取り消せます。しかも、ファイルの内容は一切失われません。

この記事では、git addを取り消す方法を、よくある状況別に分かりやすく解説します。コマンドをコピペするだけで解決できるよう、実例付きで説明していきますね。

スポンサーリンク

そもそもgit addって何をしているの?

ステージングエリアという「待合室」

git addを理解するには、ステージングエリア(インデックスとも呼ばれます)という概念を知る必要があります。

ステージングエリアは、コミットする前の「待合室」のようなものです。

実例:写真をSNSに投稿する流れで考える

  1. スマホで写真を撮る(ファイルを編集)
  2. 投稿する写真を選ぶ(git add = ステージングエリアに追加)
  3. まとめて投稿する(git commit)

git addは「この変更をコミットに含めますよ」という準備作業なんです。

なぜ取り消したくなるの?

よくある理由としては:

  • 間違ったファイルをaddしてしまった
  • まだ編集途中のファイルをaddしてしまった
  • 秘密情報が含まれるファイルをaddしてしまった
  • テスト用のファイルを含めてしまった

どんな理由でも、適切な方法で取り消せるので安心してください。

基本の取り消し方法:git restore –staged

最新のGit(2.23以降)での推奨方法

2019年にリリースされたGit 2.23から、git restoreコマンドが推奨されています。

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

git restore --staged ファイル名

実例:

git restore --staged index.html

これで、index.htmlのgit addが取り消され、ステージングエリアから外れます。でも、ファイルの変更内容はそのまま残っているので安心してください。

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

間違えてgit add .してしまった場合など、すべてを取り消したいときは:

git restore --staged .

ピリオド(.)を使うことで、ステージングエリアのすべてのファイルが取り消されます。

従来の方法:git reset(今でも使える)

git resetを使った取り消し

Git 2.23より前のバージョンを使っている場合や、慣れ親しんだ方法を使いたい場合は、git resetも使えます。

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

git reset HEAD ファイル名

実例:

git reset HEAD style.css

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

git reset HEAD

HEADは「現在のコミット」を指す特別な名前です。このコマンドも、ファイルの内容は変更しません。

状況別の解決方法

ケース1:初めてのコミット前(リポジトリを作ったばかり)

新しくリポジトリを作成して、まだ一度もコミットしていない場合、HEADが存在しないので少し特殊です。

解決方法:

git rm --cached ファイル名

実例:

git rm --cached README.md

--cachedオプションを付けることで、ファイル自体は削除されず、ステージングエリアから外れるだけです。

ケース2:特定の種類のファイルだけ取り消したい

たとえば、.logファイルをすべて取り消したい場合:

git restore --staged *.log

画像ファイルをすべて取り消したい場合:

git restore --staged *.jpg *.png *.gif

ケース3:フォルダごと取り消したい

特定のフォルダ以下をすべて取り消す:

git restore --staged フォルダ名/

実例:

git restore --staged src/test/

これで、src/testフォルダ以下のすべてのファイルがステージングエリアから外れます。

ケース4:一部のファイルは残して、特定のファイルだけ取り消したい

複数のファイルをaddした後、一部だけ取り消したい場合:

# 3つのファイルをadd
git add index.html style.css script.js

# style.cssだけ取り消す
git restore --staged style.css

# 結果:index.htmlとscript.jsはステージングされたまま

よくあるトラブルと解決方法

トラブル1:「fatal: ambiguous argument ‘HEAD’」エラー

原因: まだ一度もコミットしていないリポジトリでgit reset HEADを使った

解決方法:

git rm --cached ファイル名

トラブル2:取り消したのにgit statusに表示される

原因: これは正常な動作です

git addを取り消しても、ファイルの変更自体は残っています。git statusでは「Changes not staged for commit」として表示されます。

表示の意味:

  • 赤文字:ステージングされていない変更
  • 緑文字:ステージングされた変更

トラブル3:間違えて git reset –hard を使ってしまった

注意: git reset --hardは変更内容も消えてしまう危険なコマンドです!

もし使ってしまった場合の復旧方法:

git reflog
# 戻りたいコミットのハッシュを確認
git reset --hard ハッシュ値

実践的な使い分けガイド

どのコマンドを使うべき?

基本的な選び方:

  1. Git 2.23以降を使っているgit restore --staged
  2. Git 2.23より前git reset HEAD
  3. 初回コミット前git rm --cached

覚えておくと便利なエイリアス設定

毎回長いコマンドを打つのが面倒な場合は、エイリアス(短縮コマンド)を設定できます:

# "git unstage"で取り消せるようにする
git config --global alias.unstage 'restore --staged'

# 使い方
git unstage ファイル名

GitのGUIツールでの取り消し方法

Visual Studio Code

  1. 左側のソース管理アイコンをクリック
  2. 「ステージされた変更」セクションを確認
  3. 取り消したいファイルの「-」アイコンをクリック

GitHub Desktop

  1. 「Changes」タブを開く
  2. チェックボックスのチェックを外す

SourceTree

  1. 「ステージしたファイル」エリアを確認
  2. ファイルを選択して「ステージから除去」をクリック

GUIツールを使えば、コマンドを覚える必要もありません。初心者の方には特におすすめです。

予防策:間違えてaddしないための工夫

.gitignoreファイルを活用する

追跡したくないファイルは、最初から.gitignoreに登録しておきましょう:

# .gitignoreの例
*.log
*.tmp
node_modules/
.env
secrets/

git add -pで確認しながら追加

変更を確認しながら部分的にaddできます:

git add -p ファイル名

これを使うと、変更箇所ごとに「追加する/しない」を選べます。

git statusで常に確認する習慣

コミット前に必ず確認:

git status

緑色で表示されているファイルがステージングされたファイルです。

まとめ:git addの取り消しは怖くない

git addの取り消しについて、様々な方法を見てきました。

重要なポイント:

  1. ファイルの内容は消えない – 取り消してもファイルは無事
  2. 最新版ならgit restore --staged – 一番シンプルで分かりやすい
  3. 状況に応じて使い分ける – 初回コミット前は特別な対応が必要

今すぐ使える3つのコマンド:

  • git restore --staged ファイル名 – 特定ファイルの取り消し
  • git restore --staged . – 全ファイルの取り消し
  • git status – 現在の状態確認

最初は間違えることもあるでしょう。でも、Gitは失敗に寛容なツールです。この記事を参考にして、安心してGitを使ってください。

コマンドは慣れれば自然に使えるようになります。まずは基本のgit restore --stagedだけ覚えておけば、ほとんどの場面で対応できますよ!

コメント

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