¿Cómo eliminar un archivo del historial de Git?

Resuelto Marcos R. Guevara asked hace 7 años • 9 respuestas

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 githistorial.

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.

Marcos R. Guevara avatar May 03 '17 21:05 Marcos R. Guevara
Aceptado

Encontré esta respuesta y me ayudó:

git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch path_to_file' HEAD
Petro Franko avatar Oct 04 '2018 09:10 Petro Franko

repositorio-filtro-git

gitrecomienda utilizar el complemento de terceros git-filter-repo (cuando git filter-branchse ejecuta el comando). Hay una larga lista de razones por las que git-filter-repoes 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 --pathparámetros. Puede encontrar documentación detallada aquí: https://www.mankier.com/1/git-filter-repo

Tibor Takács avatar Oct 27 '2020 22:10 Tibor Takács

Si ha confirmado recientemente ese archivo, o si ese archivo ha cambiado en una o dos confirmaciones, le sugiero que utilice rebasey cherrypickelimine 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.

hspandher avatar May 03 '2017 14:05 hspandher