¡Para todos los fines prácticos, lo primero que debe preocuparle es CAMBIAR SUS CONTRASEÑAS! No queda claro a partir de su pregunta si su repositorio git es completamente local o si todavía tiene un repositorio remoto en otro lugar; Si es remoto y no está protegido de otros, tiene un problema. Si alguien ha clonado ese repositorio antes de que corrija esto, tendrá una copia de sus contraseñas en su máquina local, y no hay forma de que pueda obligarlos a actualizar a su versión "fija" sin pasar del historial. Lo único seguro que puede hacer es cambiar su contraseña a otra en cualquier lugar donde la haya usado.
Con eso fuera del camino, aquí está cómo solucionarlo. GitHub respondió exactamente esa pregunta como una pregunta frecuente :
Nota para usuarios de Windows : use comillas dobles (") en lugar de simples en este comando
git filter-branch --index-filter \
'git update-index --remove PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Actualización 2019:
Este es el código actual de las preguntas frecuentes:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force
Tenga en cuenta que una vez que haya insertado este código en un repositorio remoto como GitHub y otros hayan clonado ese repositorio remoto, ahora se encuentra en una situación en la que está reescribiendo el historial. Cuando otros intentan desplegar sus últimos cambios después de esto, recibirán un mensaje que indica que los cambios no se pueden aplicar porque no es un avance rápido.
Para solucionar esto, tendrán que eliminar su repositorio existente y volver a clonarlo, o seguir las instrucciones en "RECUPERACIÓN DE LA REBASE DE UPSTREAM" en la página de manual de git-rebase .
Consejo : Ejecutargit rebase --interactive
En el futuro, si accidentalmente confirma algunos cambios con información confidencial pero se da cuenta antes de pasar a un repositorio remoto, hay algunas soluciones más fáciles. Si la última confirmación es la que agrega la información confidencial, simplemente puede eliminar la información confidencial y luego ejecutar:
git commit -a --amend
Eso enmendará la confirmación anterior con cualquier cambio nuevo que haya realizado, incluidas las eliminaciones de archivos completos realizadas con a git rm
. Si los cambios están más atrás en el historial pero aún no se envían a un repositorio remoto, puede hacer un cambio de base interactivo:
git rebase -i origin/master
Eso abre un editor con las confirmaciones que ha realizado desde su último antepasado común con el repositorio remoto. Cambie "elegir" a "editar" en cualquier línea que represente una confirmación con información confidencial, y guarde y salga. Git analizará los cambios y te dejará en un lugar donde puedes:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Para cada cambio con información sensible. Eventualmente, terminará de nuevo en su sucursal, y puede impulsar con seguridad los nuevos cambios.