restore と rm の違い・使い分け
git restore と git rm は「変更を取り消す」と「ファイルを削除する」で目的が全く異なります
目的の違い
restore は「ファイルの変更を元に戻す」コマンドです。
編集してしまったファイルを前の状態に復元します。
一方 rm は「ファイルを Git の管理対象から削除する」コマンドです。
ファイル自体を消すか、Git の追跡だけを外すかを選べます。
目的が根本的に異なるので、混同しないようにしましょう。
restore の使い方
restore は 2 つの場面で使います。
(1) 作業ディレクトリの変更を元に戻す(git restore file.txt)。
(2) ステージした変更を取り消す(git restore --staged file.txt)。
どちらもファイルを「以前の状態に戻す」操作です。
ファイルを削除する機能はありません。
# 作業ディレクトリの変更を元に戻す
git restore file.txt
# ステージを取り消す(変更は作業ディレクトリに残る)
git restore --staged file.txt
# 特定のコミット時点の状態に戻す
git restore --source HEAD~2 file.txtrm の使い方
rm は Git の管理対象からファイルを削除します。
git rm file.txt はファイルをディスクからも削除し、その変更をステージします。
git rm --cached file.txt はディスク上のファイルは残したまま Git の追跡だけを外します。
.gitignore に追加し忘れたファイルを後から除外するときによく使います。
# ファイルを削除してステージ
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 を使うと「ファイル削除」がステージされてしまうので注意しましょう。
# 新規ファイルのステージを外す
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。
目的から逆引きすれば迷いません。
Git Ready