Preparar archivos, agregar un mensaje de confirmación, presionar. ¡No, espera! No ese archivo. Y ahora tenemos que empezar a buscar en Google.
Todos los desarrolladores han comprometido accidentalmente archivos confidenciales en el pasado. Entonces, ¿cómo arreglamos la situación y nos aseguramos de que no vuelva a suceder?
En este artículo, explicaré qué hacer cuando accidentalmente comprometes un archivo sensible e incluiré los comandos de Git necesarios para ajustar el historial.

Control de daños
De modo que accidentalmente cometió un archivo confidencial. Vamos llaman .env . Hay dos preguntas importantes que responder:
- ¿Envió la confirmación a un repositorio remoto?
- ¿Es público el repositorio remoto?
Aún no empujado
Si aún no presionó, la situación no es en absoluto crítica. Puede volver a una confirmación anterior :
git reset HEAD^ --soft
Sus archivos permanecerán en la copia de trabajo para que pueda corregir el archivo / información confidencial. Si desea mantener la confirmación y simplemente eliminar el archivo sensible , haga:
git rm .env --cached git commit --amend
Puede usar el --amend
único en la última confirmación. Si logró agregar un montón de confirmaciones además de eso, use:
git rebase -i HEAD~{how many commits to go back?}
Esto le permitirá corregir la confirmación defectuosa y reproducirá todas las confirmaciones restantes después de la corrección para que no las pierda.
Ya empujado
Si presionó, existe una diferencia importante entre los repositorios públicos y privados.
Si su repositorio es privado y no hay bots o personas en las que no confíe con acceso a él, puede modificar fácilmente la última confirmación usando los dos comandos anteriores.
Si colocó un montón de confirmaciones sobre la problemática, aún puede usar filter-branch o BFG repo cleaner para eliminar el archivo sensible del historial de git :
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all
Pero tenga en cuenta dos aspectos importantes de estos cambios:
- En realidad estás cambiando la historia
Si hay otras personas, otras ramas, otras bifurcaciones o solicitudes de extracción abiertas que dependen del estado actual del repositorio, las romperá. En esos casos, trate el repositorio como si fuera público y evite cambiar el historial.
- Necesitas borrar la caché
Siempre debe ponerse en contacto con el soporte de su proveedor de almacenamiento de Git y pedirle que borre la caché de su repositorio. Aunque solucionó la confirmación problemática o reescribió el historial, la confirmación anterior con el archivo sensible permanece en la caché. Necesitará saber su ID para acceder a él, pero aún estará accesible hasta que borre la caché.
¿Necesito volver a generar claves si se envían a un repositorio público?
En resumen, sí. Si su repositorio es público o no cree que sea un lugar seguro por cualquier otro motivo, debe considerar que la información confidencial está comprometida.
Incluso si elimina los datos de su repositorio, no puede hacer nada acerca de los bots y otras bifurcaciones del repositorio. Así que cuales son los siguientes pasos?
- Desactivar todas las claves y / o contraseñas
Haz esto como primer paso. Una vez que desactiva las claves, la información confidencial se vuelve inútil.
- Ajustar gitignore
Agregue todos los archivos confidenciales a .gitignore para asegurarse de que git no los rastree.
- Eliminar el archivo sensible
- Confirme la corrección con una explicación significativa
No intente ocultar el error. Otros colaboradores y usted en un mes apreciarán la explicación de lo que sucedió y lo que corrige este compromiso.
Mejores prácticas al almacenar datos confidenciales en Git
Para evitar una situación como esta en el futuro, aquí hay algunos consejos sobre el almacenamiento de datos confidenciales:
Mantenga los datos confidenciales en un archivo .env (o un archivo similar en otras plataformas)
Mantenga las claves de API y otros datos confidenciales en un solo archivo .env. De esa manera, no confirmará accidentalmente una nueva clave cuando el archivo .env ya esté excluido de git.
Otro gran beneficio es que obtiene acceso a todas las claves mediante una variable de proceso global .
Utilice claves API si es posible
Las claves de API son fáciles de generar y desactivar si se ven comprometidas. Si es posible, utilícelos y evite el uso de credenciales / contraseñas.
Agregue claves API a su herramienta de compilación
Las claves de API generalmente se necesitan durante la compilación de aplicaciones. Las herramientas de compilación como Netlify le permiten agregar estas claves en las áreas seguras de su administración. Estas claves se inyectan automáticamente en su aplicación a través de la variable de proceso global .

Agregar archivo .env a gitignore
Asegúrese de que Git no rastrea archivos que contengan información confidencial.
Proporcione el archivo .env.template
El archivo de plantilla indica a otros colaboradores que agreguen las claves API necesarias sin que tengan que leer documentos extensos.
No cambie el historial en el control remoto
Utilice esto como regla general. Si siguió las reglas anteriores, no necesitará cambiar el historial.
Espero que esta información te haya ayudado a mantenerte seguro. ¿Tiene una experiencia personal sin comprometerse o quizás una buena lección aprendida ? Háblame en Twitter :-)