Gitでパスワードなどが書かれたファイルをコミットしてしまった時に履歴の当該箇所を置き換えるには以下の例のようにコマンドを打てばいいです。今までの全てのコミットのパスワードなどの文字列を置き換えることができます。
git filter-branch --tree-filter "find . -type f -exec sed -i '' -e 's/password/置き換えたい文字列/g' -i '' -e 's/root_password/置き換えたい文字列/g' {} \;"
なお、この例の場合、複数の文字列を置き換えていますが、条件指定する時に-i -e
を毎回付けないといけないので注意してください。
私はこれに気づかず、何故か古い履歴の文字列が置き換えられてない現象に見舞われて半年くらい放置してました。
ちなみに私は、それまでGitHubでプライベートリポジトリだったものをパブリックにするために履歴にあるセキュリティに関わる情報は全て削除する必要があったのでこれをしました。