secrets-management


Nov. 30, 2025

Git 履歴から機密情報を完全に削除する

What I Learned 誤ってコミットされた機密情報(APIキー、秘密鍵、設定ファイルなど)は、通常の削除では Git の履歴に残り続ける。git filter-repo を使うことで Git の履歴を書き換え、機密情報を完全に削除できる。ただし、履歴から削除しても、すでに漏洩した認証情報が安全になるわけではないため、必ず該当する認証情報は失効・再発行する必要がある。 Details 背景 以前は git filter-branch を用いた方法が紹介されていたが、現在では公式ドキュメントにおいて注意喚起が行われており、新たに手順を作成する場合には git filter-repo の採用が推奨されている。 使用するツール git git filter-repo 作業前の注意点 本手順は履歴を書き換える破壊的操作である 共有リポジトリで実施する場合は、事前に関係者へ周知する 作業後は、全利用者に再クローンを依頼する ケース別手順 ケース1:特定のファイルを履歴から完全に削除する 1. ミラークローン 1git clone --mirror REMOTE_URL REPO_NAME.git 2cd REPO_NAME.git ミラークローンでは、すべてのブランチ・タグ・参照を含めて取得される。履歴を書き換えた結果をリモートへ正確に反映するため、本手順ではミラークローンを使用する。 2. 機密ファイルを履歴から削除 1git filter-repo \ 2 --path SENSITIVE_PATH_1 \ 3 --path SENSITIVE_PATH_2 \ 4 --invert-paths SENSITIVE_PATH_n:履歴から削除したいファイルのリポジトリ相対パス(複数指定可能) 3. リモートへ反映 1git push --force --all 2git push --force --tags ケース2:機密文字列(APIキー等)を履歴から削除・置換する 1. ミラークローン 1git clone --mirror REMOTE_URL REPO_NAME.