Réponse à incident
Vous avez commité une clé API, un mot de passe ou une clé privée. La supprimer du dernier commit ne suffit pas — Git garde le fichier dans chaque commit antérieur jusqu'à ce que vous réécriviez l'histoire.
Étape 1 : tourner immédiatement
Avant de toucher au repo, révoquez la credential. Supposez que toute histoire poussée a déjà été dupliquée, scrappée ou cachée par le programme d'archivage de GitHub.
Étape 2 : réécrire l'histoire avec filter-repo
git clone --mirror [email protected]:org/repo.git repo-mirror
cd repo-mirror
git filter-repo --path config/secrets.yml --invert-paths
cat > replace.txt <<'EOF'
regex:AKIA[0-9A-Z]{16}==>REDACTED
literal:hunter2==>REDACTED
EOF
git filter-repo --replace-text replace.txt
Étape 3 : force-push
git push --force --all
git push --force --tags
Étape 4 : élaguer les objets locaux
git reflog expire --expire=now --all
git gc --prune=now --aggressive
Détecter les secrets tôt
#!/usr/bin/env bash
gitleaks protect --staged --redact || exit 1
Erreurs courantes
Croire qu'un force-push suffit — les caches, forks, mirrors et clones de l'équipe contiennent toujours les données. Sauter la rotation. Utiliser git filter-branch, qui est déprécié et lent.
Audit
git log -p --all -S "AKIA"
git grep "hunter2" $(git rev-list --all)