.gitignoreに.envを書いても残る?手元を残して追跡だけ外す方法
すでに追跡されている.envは、.gitignoreに書くだけでは外れません。追跡だけを外して手元に残すコマンドは git rm --cached -- .env です。過去のコミット履歴は、この操作では消えません。
追跡済みの.envだけを外す
リポジトリのルート直下にある .env を追跡から外すには、次を使います。
git rm --cached -- .env--cached により、手元のファイルを残してインデックス(次のコミットの準備場所)から外します。.gitignore にも .env の無視ルールを用意します。
追跡されているか分からない場合は、先に次を確認します。
git ls-files -- .env.env と出れば対象です。何も出なければ、現在のインデックスには入っていません。その場合は追跡解除をせず、git check-ignore -v -- .env で無視ルールを調べます。
追跡済みのファイルは通常の check-ignore に出ないため、ルールだけ確認したいときは git check-ignore -v --no-index -- .env を使います。表示されたルールが ! で始まる場合は、無視を取り消す指定です。
手元・インデックス・履歴で、何が変わるか
同じ .env でも、置かれている場所は三つあります。--cached が変更するのはインデックスです。
| 順序・状態 | 手元の.env | インデックス | 過去のコミット |
|---|---|---|---|
| 未追跡の.envに無視ルールを設定 | 残る | 追加されない | 記録していない |
| .envをコミットした後で無視ルールを追加 | 残る | 残る | 残る |
| その.envをgit rm --cachedで外す | 残る | 外れる | 残る |
| 追跡解除をコミットした後 | 残る | 外れている | 以前のコミットには残る |
この表は架空ファイルで実行した結果です。自分の環境で現在未追跡だったとしても、過去に一度もコミットしていないとは判断できません。
削除表示が出ても、手元から消えたとは限らない
操作後は、次のように追跡状態とファイル名だけを確認できます。.env の値は表示しません。
git ls-files -- .env
git diff --cached --name-status -- .env .gitignore
git check-ignore -v -- .envls-files が空になり、手元のファイルは残り、無視ルールが合っていれば、追跡解除の準備ができています。.gitignore の変更も含め、意図したファイルだけがコミット候補になっているか確認します。
以前コミットした .env なら、差分に D .env と出る場合があります。これは次のコミットから削除する準備で、手元のファイルの削除を意味しません。初回の git add だけを取り消した場合は、同じ表示にはなりません。
エラーになったら、強制指定を足さずに未コミットの変更とステージ状態を確認します。共同開発では、削除を含むコミットをほかの人が取り込む際の影響も確認します。
履歴や、公開済みのキーは別に扱う
追跡解除をコミットしても、それ以前のコミットには当時の内容が残ります。本物のキーを外部へ公開・送信した場合は、キーの無効化と交換を先に行います。履歴を消すだけでは、取得済みの値を回収できません。APIキーの保管と漏えい時の対処も確認してください。
また、.gitignore はGitの無視ルールです。ディスクにあるファイルを、AIツールなどから読めなくする共通のアクセス制御ではありません。読み取りの制限には、そのツールや実行環境の設定を使います。
検証範囲と再現ファイル
2026年10月21日JSTに、AIアシスタントがLinuxの一時リポジトリ2つを使い、Git 2.39.5・Python 3.11.2で確認しました。使用した値は API_KEY=DUMMY_NOT_A_SECRET だけです。
確認したのはGitコマンドとファイル・インデックス・履歴の状態です。GUI表示、リモートへのpush、履歴書き換え、実キーの交換、共同開発者がpullしたときの動作は試していません。
架空ファイルで同じ挙動を確認したい場合は、検証資料ZIPを使えます。実行コードは一時リポジトリを作る検証用で、手元の実プロジェクトを書き換えるものではありません。
参照した公式資料と検証記録
- Git公式:gitignore
無視する対象と、パターンの適用範囲。
- Git公式:git ls-files
インデックス内のファイルを確認するコマンド。
- Git公式:git check-ignore
追跡済みファイル、--no-index、否定パターンの扱い。
- Git公式:git rm
--cachedの対象と、削除前の検査条件。
- Git公式:git diff
--cached、--name-statusで確認する範囲。
- GitHub公式:機密データの削除
キーの無効化・交換と、履歴書き換えに伴う影響。
- 架空ファイルでの検証記録
2026年10月21日JST、Git 2.39.5での実行結果。
確認日:2026年10月24日。