История репозитория долго живёт в форках и кэшах; утёкший токен нужно считать скомпрометированным даже после force-push.
GitHub и аналоги умеют блокировать push с известными шаблонами секретов и оповещать владельцев — включите это до первого инцидента.
- [Secret scanning — GitHub Docs](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning) — Обзор функции для репозиториев.
- [Removing sensitive data — GitHub Docs](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository) — Ограничения и шаги после утечки.
---
## Профилактика
Используйте .env в .gitignore, шаблон .env.example без значений и pre-commit hook с локальным сканером.
В CI подставляйте секреты из хранилища, а не echo в лог.
