← Blog
// BLUE TEAM · DEVSECOPS

Un secreto en git no se borra: se rota (y por qué)

Publicado el 12 ago 2026 · 7 min de lectura
Blue TeamDevSecOpsGitSecretos

La escena es universal: subes sin querer un .env con una API key, lo ves a los cinco minutos, haces git rm, un commit «remove secret» y respiras. Mal hecho: el secreto sigue ahí, intacto, en el historial. Y a estas alturas, probablemente ya lo tenga alguien más.

Por qué borrarlo no lo borra

Git no guarda «el estado actual», guarda todos los cambios. Tu commit de borrado añade una línea nueva a la historia, no la reescribe. El secreto sigue accesible con un comando trivial:

git log -p | grep -i "api_key"
git show <commit-donde-lo-metiste>

Y no es solo tu clon. Si lo empujaste a un repositorio compartido, asume que ya no lo controlas: hay forks, clones de compañeros, copias en la caché del proveedor, en los logs de CI y en los backups. Peor: bots automáticos escanean los commits públicos en tiempo real; una clave de AWS filtrada puede estar minando criptomonedas en tu cuenta en cuestión de minutos.

Lo primero, siempre: rotar

El instinto es «borro el commit y arreglado». No. Lo primero, antes que nada, es revocar y rotar la credencial en el proveedor (AWS, GitHub, Stripe, tu base de datos…). Desde el segundo en que un secreto toca un repositorio, trátalo como comprometido —aunque el repo sea privado—. Rotar es lo que corta el riesgo; lo demás es limpieza.

⚠️ «Es un repo privado» no te salva: los forks internos, los logs de CI, los tokens de integraciones y los backups multiplican las copias. Un secreto commiteado es un secreto quemado.

Limpiar el historial: útil, pero no es el remedio

Una vez rotada la credencial, puedes reescribir la historia para quitar el rastro con git filter-repo (o BFG). Pero entiende sus límites:

Dónde se esconden (más allá del historial)

🔑 Antes de hacer commit, pasa tu diff, tu .env o tu config por el Escáner de Secretos: detecta claves de AWS, tokens de GitHub/Slack, claves privadas, JWT y cadenas de alta entropía, en tu navegador (nada se sube). La forma más barata de cazar el secreto es no dejar que llegue al repo. Y si el filtrado es un JWT, mira también por qué un token se lee sin clave.

Prevención que sí funciona

Checklist ante una fuga

«Ya lo borré» es la frase que precede a la factura de AWS. En git, un secreto no se borra: se rota. Interioriza esa diferencia y te ahorrarás el incidente que empieza con «pero si lo quité en el commit siguiente».

Comparte: LinkedIn X
Sergio Belmonte Morales
Sergio Belmonte Morales
Analista de Ciberseguridad · SOC · Especialista en Sentinel/KQL