🗑️

Gitでファイルを管理対象から外す方法

に公開
2026/07/24

1. はじめに

「このファイルは、もうGitで追跡したくない」

開発を進めていると、このような場面によく遭遇します。

  • ログファイルやキャッシュが誤ってコミットされた
  • ビルド成果物を除外し忘れた

すでに追跡中のファイルを外したい場合、単に.gitignoreへ追加するだけでは不十分です。リポジトリの履歴には残しつつ、今後は追跡しないようにする手順を解説します。

2. 基本的な手順

2.1. ステップ1:.gitignoreに追加

まず、今後追跡したくないファイルを.gitignoreに記載します。

# .gitignore
config/database.yml
logs/*.log
node_modules/

2.2. ステップ2:インデックスから削除

git rm --cached <ファイルパス>

--cachedオプションがポイントです。

  • インデックス(追跡対象)からのみ削除
  • ワークツリー(実際のファイル)は残る

2.3. ステップ3:コミット

git commit -m "Stop tracking config/database.yml"

これで完了です。次回以降、そのファイルはGitの管理対象外になります。

3. ディレクトリ全体を除外する場合

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

私の例では、アプリケーションが加工したデータをdataディレクトリ配下に出力していました。ディレクトリに対して以下のコマンドを実行すると、エラーになります。

git rm --cached data/

以下のエラーが表示されます。

fatal: not removing 'data/' recursively without -r

解決するには、-rオプションを追加します。

git rm --cached -r data/

これで追跡中のディレクトリごと管理対象から外れます。

4. よくある間違いと注意点

4.1. 注意:--cachedを忘れると危険

git rm secret.txt  # ファイルが物理削除される!

--cachedオプションを忘れると、ワークツリーからもファイルが削除されてしまいます。

5. 履歴からも完全に削除したい場合

注意:これは危険な操作です。チーム開発では、十分に確認したうえで実行してください。

# 履歴からも完全に削除(BFG Repo-Cleaner を使用)
# ※事前にバックアップを取ること
java -jar bfg.jar --delete-files secret.txt repo.git
cd repo.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive

6. 参考リンク

GitHubで編集を提案

Discussion