基本

git rm

ファイルをワーキングツリーとインデックスから削除します。Git の管理からファイルを外す際に使用します。

構文 git rm <pathspec>...

オプション

フラグ 説明
--cached ファイルをワーキングツリーに残したまま、インデックス(ステージングエリア)からのみ削除します。Git の管理対象から外す場合に使います。
-r ディレクトリを再帰的に削除します。ディレクトリを指定する場合は必須です。
-f, --force インデックスの内容と異なるファイルも強制的に削除します。安全装置を無効にするため注意が必要です。
--dry-run 実際には削除せず、削除対象のファイル一覧を表示します。操作前の確認に使います。

git rm は、ファイルをワーキングツリー(作業ディレクトリ)とインデックス(ステージングエリア)の両方から削除します。単なる OS の rm コマンドとは異なり、Git の管理下でファイルを正しく削除できます。

基本的な使い方

# ファイルをワーキングツリーとインデックスの両方から削除
git rm README.md

# 削除内容をコミット
git commit -m "README.md を削除"

git rm を実行すると、ファイルの削除が自動的にステージングされます。あとは git commit するだけで履歴に記録されます。

ファイルを残して Git 管理から外す

--cached オプションを使うと、ファイルをディスクに残したまま Git の追跡対象から外せます。

# インデックスからのみ削除(ファイルは残る)
git rm --cached secret.env

# .gitignore に追記して今後も無視されるようにする
echo "secret.env" >> .gitignore

# 変更をコミット
git commit -m "secret.env を管理対象から除外"

この方法は、誤ってコミットしてしまった機密ファイル(APIキー、パスワードが含まれる .env ファイルなど)を Git 管理から外す際にも使われます。

注意: すでにリモートリポジトリにプッシュ済みの場合、git rm --cached だけでは履歴からは削除されません。履歴ごと消すには git filter-branch や BFG Repo Cleaner などの別ツールが必要です。

ディレクトリごと削除する

ディレクトリを削除する場合は -r オプションが必要です。

# ディレクトリ内のファイルをすべて削除
git rm -r old-docs/

# 削除前に対象ファイルを確認する
git rm -r --dry-run old-docs/

通常の rm との違い

操作ワーキングツリーインデックス
rm ファイル削除される変更されない(git add が必要)
git rm ファイル削除される削除がステージングされる
git rm --cached ファイル残る削除がステージングされる

rm だけ使ってしまった場合

OS の rm でファイルを削除した場合、インデックスには削除が反映されていません。

rm README.md

# git status で確認
git status
# deleted:    README.md   ← ステージングされていない状態

このとき、以下の方法でステージングできます。

# 削除をインデックスに反映する
git add README.md

# または、追跡中ファイルの変更・削除をまとめてステージング
git add -u

rm で削除したファイルを元に戻す

誤って削除した場合は git restore で復元できます。

# 誤って削除したファイルを復元
git restore README.md

削除前に対象を確認する

--dry-run で実際には削除せず、対象ファイルを確認できます。

git rm --dry-run *.log
# rm 'error.log'
# rm 'access.log'

問題がなければ --dry-run なしで実行します。