¿Cómo eliminar un archivo del historial de Git?
Hace algún tiempo agregué información (archivos) que deben ser privados. Eliminarlo del proyecto no es un problema, pero también necesito eliminarlo del git
historial.
Utilizo Git y Github (cuenta privada).
Nota: En este hilo se muestra algo similar, pero aquí hay un archivo antiguo que se agregó a una rama de características, esa rama se fusionó con una rama de desarrollo y finalmente se fusionó con la maestra, desde entonces se realizaron muchos cambios. Entonces no es lo mismo y lo que se necesita es cambiar el historial y ocultar esos archivos por motivos de privacidad.
Encontré esta respuesta y me ayudó:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch path_to_file' HEAD
repositorio-filtro-git
git
recomienda utilizar el complemento de terceros git-filter-repo (cuando git filter-branch
se ejecuta el comando). Hay una larga lista de razones por las que git-filter-repo
es mejor que cualquier otra alternativa , mi experiencia es que es muy sencilla y muy rápida.
Este comando elimina el archivo de todas las confirmaciones en todas las ramas:
git filter-repo --invert-paths --path <path to the file or directory>
Se pueden especificar varias rutas utilizando varios --path
parámetros. Puede encontrar documentación detallada aquí:
https://www.mankier.com/1/git-filter-repo
Si ha confirmado recientemente ese archivo, o si ese archivo ha cambiado en una o dos confirmaciones, le sugiero que utilice rebase
y cherrypick
elimine esa confirmación en particular.
De lo contrario, tendrías que reescribir toda la historia.
git filter-branch --tree-filter 'rm -f <path_to_file>' HEAD
Cuando esté satisfecho con los cambios y se haya asegurado debidamente de que todo parece estar bien, deberá actualizar todas las sucursales remotas.
git push origin --force --all
Nota:- Es una operación compleja y debes ser consciente de lo que estás haciendo. Primero intenta hacerlo en un repositorio de demostración para ver cómo funciona. También debe informar a otros desarrolladores al respecto, de modo que no realicen ningún cambio mientras tanto.