ガイド

restore と rm の違い・使い分け

git restore と git rm は「変更を取り消す」と「ファイルを削除する」で目的が全く異なります

restore と rm の違い・使い分け diagram

目的の違い

restore は「ファイルの変更を元に戻す」コマンドです。

編集してしまったファイルを前の状態に復元します。

一方 rm は「ファイルを Git の管理対象から削除する」コマンドです。

ファイル自体を消すか、Git の追跡だけを外すかを選べます。

目的が根本的に異なるので、混同しないようにしましょう。

restore の使い方

restore は 2 つの場面で使います。

(1) 作業ディレクトリの変更を元に戻す(git restore file.txt)。

(2) ステージした変更を取り消す(git restore --staged file.txt)。

どちらもファイルを「以前の状態に戻す」操作です。

ファイルを削除する機能はありません。

bash
# 作業ディレクトリの変更を元に戻す
git restore file.txt

# ステージを取り消す(変更は作業ディレクトリに残る)
git restore --staged file.txt

# 特定のコミット時点の状態に戻す
git restore --source HEAD~2 file.txt

rm の使い方

rm は Git の管理対象からファイルを削除します。

git rm file.txt はファイルをディスクからも削除し、その変更をステージします。

git rm --cached file.txt はディスク上のファイルは残したまま Git の追跡だけを外します。

.gitignore に追加し忘れたファイルを後から除外するときによく使います。

bash
# ファイルを削除してステージ
git rm file.txt

# Git の追跡だけ外す(ファイルはディスクに残る)
git rm --cached file.txt

# .gitignore に追加し忘れた .env を除外する例
echo ".env" >> .gitignore
git rm --cached .env
git commit -m "stop tracking .env"

よくある混同パターン

「ステージした追加ファイルを取り消したい」とき、rm --cached と restore --staged の両方が使えるように見えます。

新規ファイルの場合は rm --cached で追跡を外し、既存ファイルの変更の場合は restore --staged でステージを外すのが正解です。

既存ファイルに rm --cached を使うと「ファイル削除」がステージされてしまうので注意しましょう。

bash
# 新規ファイルのステージを外す
git add newfile.txt
git rm --cached newfile.txt  # OK: 追跡を外す

# 既存ファイルの変更のステージを外す
git add existing.txt
git restore --staged existing.txt  # OK: ステージだけ外す
# git rm --cached existing.txt  # NG: ファイル削除がステージされる!

使い分けのまとめ

「変更を元に戻したい」→ restore。

「ファイルを Git から消したい」→ rm。

「.gitignore に入れ忘れたファイルの追跡を外したい」→ rm --cached。

「間違えて git add した既存ファイルをアンステージしたい」→ restore --staged。

目的から逆引きすれば迷いません。

関連コマンド