トラブルシューティング
機密ファイルを誤ってコミットしたときの対処法
.env やパスワードファイルを誤ってコミットした場合の対処と予防策
追跡を解除してコミットし直す
bash
# 追跡を解除(ファイルは残る)
git rm --cached .env
# .gitignore に追加
echo ".env" >> .gitignore
# コミット
git add .gitignore
git commit -m "機密ファイルを追跡対象から除外"直前のコミットを修正する(未 push の場合)
bash
# 直前のコミットを取り消し(変更はワーキングツリーに残る)
git reset HEAD~1
# .gitignore に追加してから再コミット
echo ".env" >> .gitignore
git add .
git commit -m "機密ファイルを除外して再コミット"履歴からも完全に削除する(push 済みの場合)
漏洩した認証情報を即座にローテーション
まず最優先で、漏れたトークンやパスワードを無効化して再発行します。履歴の削除より先に必ず実施してください。
git filter-repoまたは BFG Repo-Cleaner で履歴から除去git filter-repo --path .env --invert-pathsのように指定して、過去コミットからファイルを抹消します。BFG はbfg --delete-files .envが簡単です。force push でリモートを更新
履歴を書き換えたので
git push --force-with-leaseでリモートに反映します。チームメンバーに周知
履歴書き換えは共有ブランチに大きな影響を与えるため、必ずチーム全員に連絡し、各自で再クローンまたは fetch + reset を行ってもらいます。
bash
# git filter-repo を使う場合
git filter-repo --path .env --invert-paths
# BFG を使う場合
bfg --delete-files .env
git reflog expire --expire=now --all
git gc --prune=now --aggressive予防策: .gitignore を最初に設定する
プロジェクト開始時に
.gitignoreを設定最も効果的な予防策です。github.com/github/gitignore のテンプレートを流用すると抜け漏れを減らせます。
git add .の前にgit statusで確認これから追加されるファイルを毎回確認する習慣をつけると、意図しないファイルの混入を早期に発見できます。
secret scanning を有効化
GitHub の secret scanning(Push protection)を有効にしておくと、トークン等を push する前に Git がブロックしてくれます。
Git Ready