Skip to content
トラブルシューティング5 分で読めます検証済み Git 2.40+

すでにコミットされたファイルを Git の管理対象から外す方法

.gitignore に追加したのに変更が検知され続けてしまう原因と、ローカルの作業ファイルを維持したまま Git のインデックスから安全に追跡解除する完全手順。

1. .gitignore が「未追跡ファイル」にのみ有効な理由

Git の仕様として、.gitignore はまだ Git に登録されていない「未追跡ファイル (Untracked files)」に対してのみ効果を発揮します。過去に一度でも git add および git commit を実行したファイルは、Git のインデックス(ステージングエリア)に記録され、管理対象(Tracked)となっています。

そのため、後から .gitignore にファイル名やパターンを記述しても、Git は自動的にそのファイルの追跡を停止しません。.gitignore の除外ルールを反映させるには、ローカルディスクの実ファイルを残したまま、Git のインデックスからのみ削除(追跡解除)する操作が必要です。

.gitignore の鉄則

.gitignore は未追跡ファイルを誤って Git にコミットしないための設定です。すでに Git が追跡しているファイルを自動で管理対象外にする機能はありません。

2. 解決手順 1:特定のファイル 1 つを追跡解除する

git rm コマンドに --cached オプションを付けることで、ローカルの物理ファイルを削除せずに Git のインデックスからのみファイルを安全に除外できます。

bash
# 1. .gitignore に該当ファイルが記載されていることを確認
echo ".env" >> .gitignore

# 2. Git のインデックスからのみ削除(ローカルの実ファイルは保持)
git rm --cached .env

# 3. 追跡解除をコミット
git commit -m "Stop tracking .env file"

3. 解決手順 2:ディレクトリ(フォルダ)全体を再帰的に追跡解除する

build/ や node_modules/ など、フォルダ全体が誤ってコミットされている場合は、再帰的に処理を行う -r オプションを併せて指定します。

bash
# 1. .gitignore にフォルダ除外ルールを追加
echo "build/" >> .gitignore

# 2. ディレクトリ全体を Git のインデックスから再帰的に削除
git rm -r --cached build/

# 3. 変更をコミット
git commit -m "Stop tracking build/ output directory"

4. 解決手順 3:リポジトリ全体のキャッシュを一括で再適用する

.gitignore を後から本格的に作成し、多数のファイルがすでにコミットされている場合は、一度インデックスの追跡キャッシュを全てクリアして再登録するのが最も確実です。

bash
# 1. 作業中の変更がすべてコミットまたは stash されていることを確認
git status

# 2. Git インデックスの追跡キャッシュを一旦すべてクリア
git rm -r --cached .

# 3. .gitignore のルールを適用してファイルを再追加
git add .

# 4. キャッシュの再構築をコミット
git commit -m "Refresh repository tracking to match .gitignore"

5. 安全性の確認とチーム開発における注意点

注意:作業者本人のローカル保持とチームメンバーへの影響

コマンドを実行した本人の PC 上ではローカルファイルは一切削除されません。しかし、このコミットを push した場合、他のメンバーが git pull を実行すると、リポジトリから削除されたとみなされ、他メンバーのローカルファイルが削除される可能性があります。

.env などの機密ファイルや設定ファイルを追跡解除して push する際は、事前にチームへ連絡し、設定テンプレートとして .env.example などを共有しておくことを推奨します。

よくある質問 (FAQ)

.gitignore の書き方、キャッシュ削除、リポジトリ管理に関するエンジニアの疑問に回答します。

.gitignore に書いたのに Git が変更を検知し続けるのはなぜですか?

.gitignore は未追跡(Untracked)のファイルにのみ有効です。以前に git add でコミットされたファイルは、'git rm --cached <ファイル名>' で明示的にインデックスから削除するまで追跡され続けます。

git rm --cached を実行するとローカルのファイルも消えてしまいますか?

いいえ、消えません。--cached オプションを付けることで、Git の管理記録(ステージングインデックス)からのみ削除され、手元の物理ファイルはそのまま安全に残ります。

追跡解除したコミットを push すると、他のメンバー側で何が起きますか?

他の開発者が git pull を実行した際、Git はそのファイルを「削除された」と解釈するため、他の開発者のローカルディスクからそのファイルが削除される場合があります。事前に .env.example などの代替設定ファイルを用意しておきましょう。

← ガイドを読むフルジェネレーターで開く