コンテンツにスキップ

あれ? gitignore が効かない

[質問]

WSLで、ローカルリポジトリに ".gitignore" を作りましたが、そこで指定したファイルが無視されないのは、なにが原因ですか

[回答] Gemini

それは非常に「Gitあるある」な現象ですね!原因はほぼ間違いなく、.gitignore を作成する前に、そのファイルを一度 Git の管理下(インデックス)に入れてしまったことにあります。

Gitのルールとして、「すでに追跡(track)されているファイルは、後から .gitignore に書いても無視されない」という性質があります。


原因:インデックスにキャッシュが残っている

.gitignore は「これから新しく追加されるファイル」には効きますが、すでに git add されてリポジトリに記録されているファイルに対しては、手動で追跡を解除してあげる必要があります。


解決策:キャッシュを削除する(インデックスから外す)

ファイル自体を削除せずに、Gitの管理対象からだけ外すコマンドを実行します。

1. 特定のファイルだけ無視したい場合

例えば config.json を無視したいなら:

git rm --cached config.json

2. .gitignore の設定をすべて反映し直したい場合(推奨)

一度すべてのキャッシュをクリアして、.gitignore に基づいて登録し直すのが一番確実です。

  1. 現在の変更をすべてコミットしておく(念のため)

    git add .
    git commit -m "Save work before re-indexing"
    

  2. インデックス(キャッシュ)をすべて削除

    git rm -r --cached .
    

--cached を付け忘れると実ファイルが消えるので注意してください!

  1. 改めてすべて追加し直す

    git add .
    

  2. 反映をコミットする

    git commit -m "Fix: Apply .gitignore rules"
    


その他のチェックポイント

もし上記でも直らない場合は、以下の2点を確認してみてください。

  • ファイル名が正しいか: .gitignore のスペルが間違っていないか(先頭のドット . を忘れがちです)。
  • 記述ルール: 例えば dist/ と書くとフォルダごと無視されますが、/dist だとルート直下のフォルダのみに限定されます。

次に役立つヒント

「何が原因で無視されていないのか」を確認するには、以下のコマンドが便利です。

git check-ignore -v <ファイル名>

これを使うと、「どの設定ファイルの、どの行が原因で無視(あるいは追跡)されているか」をピンポイントで教えてくれます。

この後、「GitHubに間違えて上げてしまった機密情報(パスワードなど)を完全に消し去る方法」などについて詳しく知りたいですか?