git rm
ファイルをワーキングツリーとインデックスから削除します。Git の管理からファイルを外す際に使用します。
git rm <pathspec>... 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 なしで実行します。