Security


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. リモートへ反映