git addを取り消す!restoreコマンドの使い方完全ガイド

git

「うっかり全部git addしちゃった…」 「このファイルだけステージングから外したい…」 「git resetとgit restoreの違いがよく分からない…」

大丈夫です!git addは簡単に取り消せます

実は、Gitには「やり直し」のための便利なコマンドがたくさん用意されています。2019年に登場したgit restoreは、より直感的で安全にファイルの状態を戻せる新しいコマンドです。

この記事では、git addの取り消し方法から、restoreコマンドの使いこなし方まで、実例付きで分かりやすく解説します。もう間違いを恐れる必要はありません!


スポンサーリンク
  1. まず理解しよう!Gitの3つのエリア
    1. 📂 Gitの基本構造
    2. 🎯 git addは何をしているのか
  2. 【即解決】git addを取り消す3つの方法
    1. 🆕 方法1:git restore –staged(推奨・最新)
    2. 📝 方法2:git reset HEAD(従来の方法)
    3. 🔄 方法3:git rm –cached(初回add時のみ)
  3. git restoreコマンド完全マスター
    1. 🎓 restoreの基本構文
    2. 💡 実践的な使用例
  4. 作業内容も取り消したい場合
    1. ⚠️ 注意:データが消える操作
    2. 🔐 安全に作業する方法
  5. よくあるシナリオと解決法
    1. 📁 シナリオ1:間違えてgit add .した
    2. 🔒 シナリオ2:.gitignoreすべきファイルをaddした
    3. 📝 シナリオ3:一部の変更だけコミットしたい
    4. 🔄 シナリオ4:コミット後に気づいた
  6. git resetとgit restoreの使い分け
    1. 🆚 コマンドの比較表
    2. 📚 使い分けの指針
  7. エイリアス設定で効率化
    1. ⚡ よく使うコマンドを短縮
  8. GUI/IDEでの取り消し方法
    1. 🖥️ Visual Studio Code
    2. 🔧 その他のツール
  9. トラブルシューティング
    1. ❓ よくある問題と解決法
  10. ベストプラクティス
    1. ✅ 安全な作業フロー
  11. よくある質問と回答
    1. Q:git restore –stagedとgit reset HEADの違いは?
    2. Q:誤って重要なファイルの変更を破棄してしまった
    3. Q:コミット済みのファイルをgit addの前の状態に戻したい
    4. Q:git add -Aとgit add .の違いは?
    5. Q:ステージングエリアを完全にクリアしたい
  12. まとめ:もうgit addの取り消しで悩まない!

まず理解しよう!Gitの3つのエリア

📂 Gitの基本構造

Gitには3つの重要なエリアがあります:

作業ディレクトリ → ステージング → リポジトリ
(Working Dir)     (Staging)      (Repository)
     ↓               ↓                ↓
  編集中のファイル   git add後     git commit後

各エリアの役割:

  • 作業ディレクトリ:実際にファイルを編集する場所
  • ステージング:コミット予定のファイルを置く場所
  • リポジトリ:コミット済みの履歴が保存される場所

🎯 git addは何をしているのか

# git addの動作
ファイル編集 → git add → ステージングエリアに移動
                ↑
            この操作を取り消したい!

git addは、ファイルを「ステージングエリア」に移動させる操作です。つまり、取り消し = ステージングから除外ということになります。


【即解決】git addを取り消す3つの方法

🆕 方法1:git restore –staged(推奨・最新)

基本的な使い方

# 特定のファイルをステージングから除外
git restore --staged ファイル名

# 例:index.htmlを取り消し
git restore --staged index.html

# 複数ファイルを指定
git restore --staged file1.txt file2.txt

# すべてのファイルを取り消し
git restore --staged .

なぜrestoreが推奨されるのか

メリット:

  • コマンドの意図が明確(restore = 復元)
  • 間違えにくい(–stagedオプションで明示的)
  • Git 2.23以降の標準的な方法

📝 方法2:git reset HEAD(従来の方法)

使い方

# 特定のファイルを取り消し
git reset HEAD ファイル名

# 例
git reset HEAD index.html

# すべて取り消し
git reset HEAD

# または
git reset

注意点:

  • 古いGitバージョンでも使える
  • でも、resetは他の用途もあるので混乱しやすい

🔄 方法3:git rm –cached(初回add時のみ)

新規ファイルの場合

# まだ一度もコミットしていないファイル
git rm --cached 新規ファイル名

# 例
git rm --cached newfile.txt

使用場面:

  • 新規作成したファイルを間違ってaddした
  • .gitignoreに追加し忘れたファイル

git restoreコマンド完全マスター

🎓 restoreの基本構文

git restore [オプション] [ファイル名]

主要オプション:

オプション効果使用場面
--stagedステージングから除外add取り消し
--source=<commit>特定コミットから復元過去の状態に戻す
--worktree作業ディレクトリを復元編集を破棄(デフォルト)
-SWstaged + worktree完全にリセット

💡 実践的な使用例

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

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

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

# 確認
git status
# Changes to be committed:
#   modified: app.js
#   modified: index.html
# Changes not staged:
#   modified: style.css

ケース2:ディレクトリ単位で取り消し

# srcディレクトリ以下をすべて取り消し
git restore --staged src/

# 特定の拡張子だけ取り消し
git restore --staged "*.css"

ケース3:部分的に取り消し(対話モード)

# パッチモードで部分的に取り消し
git restore --staged -p ファイル名

# 各変更に対して選択
# y: この変更を取り消す
# n: この変更は取り消さない
# q: 終了
# a: このファイルの残りすべて取り消す

作業内容も取り消したい場合

⚠️ 注意:データが消える操作

ステージングと作業内容の両方を取り消し

# 警告:編集内容が完全に消えます!

# ステージングから除外 + 編集も破棄
git restore --staged --worktree ファイル名

# 短縮形
git restore -SW ファイル名

# より安全:まずステージングだけ取り消し
git restore --staged ファイル名
# 内容を確認してから
git restore ファイル名

🔐 安全に作業する方法

変更を一時保存してから取り消し

# 現在の変更を一時保存(stash)
git stash

# ステージングをクリア
git restore --staged .

# 必要なら変更を復元
git stash pop

よくあるシナリオと解決法

📁 シナリオ1:間違えてgit add .した

# 全部addしてしまった!
git add .

# 解決法1:全部取り消し
git restore --staged .

# 解決法2:特定ファイルだけ残す
git restore --staged .
git add 必要なファイル.txt

🔒 シナリオ2:.gitignoreすべきファイルをaddした

# .envファイルを間違ってadd
git add .env

# ステップ1:ステージングから除外
git restore --staged .env

# ステップ2:.gitignoreに追加
echo ".env" >> .gitignore

# ステップ3:.gitignoreをコミット
git add .gitignore
git commit -m "Add .env to .gitignore"

📝 シナリオ3:一部の変更だけコミットしたい

# ファイルに複数の変更がある場合

# 方法1:対話的にadd
git add -p ファイル名
# 必要な部分だけ y で選択

# 方法2:一旦全部addして、不要な部分を取り消し
git add ファイル名
git restore --staged -p ファイル名
# 不要な部分を y で取り消し

🔄 シナリオ4:コミット後に気づいた

# すでにコミットしてしまった場合

# 直前のコミットを修正
git reset --soft HEAD~1
# これでコミット前の状態(ステージング済み)に戻る

# 不要なファイルを除外
git restore --staged 不要なファイル

# 再コミット
git commit -m "修正したコミットメッセージ"

git resetとgit restoreの使い分け

🆚 コマンドの比較表

目的git restoregit resetどちらを使う?
add取り消しrestore --stagedreset HEADrestore推奨
編集を破棄restore ファイルcheckout -- ファイルrestore推奨
コミット取り消しできないreset --soft/mixed/hardresetのみ
ブランチ移動できないreset --hard ブランチresetのみ

📚 使い分けの指針

git restoreを使う場合:

  • ファイル単位の操作
  • ステージングの操作
  • 作業ディレクトリの復元

git resetを使う場合:

  • コミットの取り消し
  • ブランチの位置を変更
  • より複雑な履歴操作

エイリアス設定で効率化

⚡ よく使うコマンドを短縮

# エイリアス設定例

# "unstage"でadd取り消し
git config --global alias.unstage 'restore --staged'
# 使い方: git unstage ファイル名

# "discard"で変更破棄
git config --global alias.discard 'restore'
# 使い方: git discard ファイル名

# "unstage-all"で全取り消し
git config --global alias.unstage-all 'restore --staged .'
# 使い方: git unstage-all

# 設定確認
git config --global --list | grep alias

GUI/IDEでの取り消し方法

🖥️ Visual Studio Code

  1. サイドバーの「ソース管理」タブを開く
  2. ステージされた変更セクションでファイルを確認
  3. ファイル名の横の「-」ボタンをクリック
  4. または右クリック → 「ステージングを解除」

🔧 その他のツール

GitHub Desktop:

  • ファイルのチェックボックスを外す

SourceTree:

  • ステージングエリアからファイルをドラッグ

Git Extensions:

  • ファイルを選択 → 「Unstage」ボタン

トラブルシューティング

❓ よくある問題と解決法

問題1:restoreコマンドが使えない

# エラー: git: 'restore' is not a git command
# 原因: Gitバージョンが古い(2.23未満)

# バージョン確認
git --version

# 解決法1:Gitをアップデート
# Mac
brew upgrade git

# Windows
# Git公式サイトから最新版をダウンロード

# 解決法2:代替コマンドを使用
git reset HEAD ファイル名  # addの取り消し
git checkout -- ファイル名  # 変更の破棄

問題2:間違えて変更を破棄してしまった

# git restore で編集内容を消してしまった!

# 可能性1:まだエディタが開いている
# → エディタのUndo機能(Ctrl+Z)を試す

# 可能性2:IDEの自動保存機能
# → IDEのLocal History機能を確認

# 可能性3:git reflogから復元を試みる
git reflog
# 以前の状態が残っていれば復元可能

ベストプラクティス

✅ 安全な作業フロー

  1. こまめにコミット
    • 小さな単位でコミット
    • 取り消しやすくなる
  2. ステータス確認を習慣化 git status # 現在の状態を確認 git diff --staged # ステージングされた変更を確認
  3. 重要な変更は事前にバックアップ git stash # 一時保存 git branch backup-branch # バックアップブランチ作成
  4. エイリアスで事故防止 # 破壊的操作に確認を追加 git config --global alias.restore-all '!echo "本当に全て復元しますか?[y/N]" && read ans && [ "$ans" = "y" ] && git restore .'

よくある質問と回答

Q:git restore –stagedとgit reset HEADの違いは?

A: 機能的にはほぼ同じですが、git restoreの方が意図が明確です。restoreは「復元」専用のコマンドとして設計されており、間違いにくいです。Git 2.23以降なら、restoreを使うことが推奨されています。

Q:誤って重要なファイルの変更を破棄してしまった

A: まずエディタのUndo機能を確認してください。次に、git reflogで過去の状態を確認し、可能なら復元します。今後はgit stashで変更を保存してから操作することをおすすめします。

Q:コミット済みのファイルをgit addの前の状態に戻したい

A: git restore --source=HEAD~1 ファイル名で、1つ前のコミットの状態に戻せます。または、git show HEAD~1:ファイル名 > ファイル名でも可能です。

Q:git add -Aとgit add .の違いは?

A: git add .現在のディレクトリ以下git add -Aリポジトリ全体が対象です。また、git add -Aは削除されたファイルも含みます。

Q:ステージングエリアを完全にクリアしたい

A: git restore --staged .またはgit resetで、すべてのステージングを取り消せます。作業内容は保持されます。


まとめ:もうgit addの取り消しで悩まない!

git addの取り消しは、適切なコマンドを知っていればとても簡単です。

覚えておくべき3つのコマンド:

  1. git restore --staged ファイル名(推奨・最新)
  2. git reset HEAD ファイル名(従来の方法)
  3. git status(常に状態を確認)

黄金ルール:

  • 迷ったらgit statusで確認
  • 破壊的操作の前はgit stashでバックアップ
  • 小さくこまめにコミットする

これらのコマンドを使いこなせば、Gitでの作業がもっと快適になります。間違いを恐れず、どんどんコードを書いていきましょう!

安心してGitを使いこなしてください! 🚀✨

コメント

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