機密ファイルを.gitignoreで指定し、非公開指定したにもかかわらず、Githubにコミット&プッシュされてしまう事例があったので、原因と対処法を記します。
最初にやったこと(失敗したこと)
やったことは普通です。非公開にしたい.envファイルと同じ階層に.gitignoreファイルを作成し、.envファイルを非公開にするよう指定しました。
📂 プロジェクト
├── 📄 その他ファイル
├── 📄 .env
└── 📄 .gitignore
# 環境変数ファイル
.env
そして、プロジェクト全体をgitにプッシュ。これで、.env以外のファイルのみがGithubに公開される見込みでした。
$ git add .
$ git commit -m "コミットメッセージ"
$ git push origin ブランチ名
しかし、残念なことに.envファイルはアップロードされてしまっていました。正しい手順で行ったはずなのに、なぜ?
非公開指定が効かなかった原因
原因究明は、こちらの記事のおかげでできました。この執筆者と同じく、私も一度gitにアップしていたものを非公開指定したことが原因でした。キャッシュにインデックスが残っているため、.gitignoreの設定が反映されなかったということです。
.gitignoreに記載したのに反映されない件 - Qiita
対処
対処1 Githubのコミットを削除する
何はともあれ、公開してしまった機密ファイルを削除しなければなりません。削除にあたっては、次の点を押さえないといけません。とくに、ローカルファイルまで以前の状態に戻してしまわないよう注意が必要です。
- Github上のコミットは、1つ前のコミット時の状態に戻すこと
- ローカルファイルは最新の状態を維持すること
つぎのコマンドで意図するとおりに処置できます。
$ git reset --soft 1つ前のコミットハッシュ
$ git push origin ブランチ名 --force
対処2 キャッシュを削除し、再コミットする
キャッシュの削除は、次のコマンドで処置できます。先ほど参照した記事でも同じ手法が紹介されています。
$ git rm -r --cached .
rm .
という物騒なコマンドですが、キャッシュを削除するだけです。しかし、不安な方はプロジェクトをどこかにコピペするなどし、バックアップをとっておくと良いでしょう。
感想
QiitaやZennで検索してみると、かなり多くの人が直面したことのある症状でした。エンジニアをやる以上、誰しもが一度は通る道なのかも?いずれにせよ勉強になりました。