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.
Yo uso 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, ya que se hicieron muchos cambios. Entonces no es lo mismo y lo que se necesita es cambiar el historial y ocultar esos archivos por privacidad.
git rebase
entoncesgit push -f
filter-branch
método descrito en el duplicado sugerido hará lo que desee.git filter-branch
Respuestas:
Encontré esta respuesta y me ayudó:
Lo encontré aquí https://myopswork.com/how-remove-files-completely-from-git-repository-history-47ed3e0c4c35
fuente
.env
. Solución rápida y precisa.<previous_hash>..HEAD
y ahorre algo de tiempo.git push --force
Si ha confirmado recientemente ese archivo, o si ese archivo ha cambiado en una o dos confirmaciones, le sugiero que use
rebase
ycherrypick
para eliminar esa confirmación en particular.De lo contrario, tendría que reescribir todo el historial.
Cuando esté satisfecho con los cambios y se haya asegurado debidamente de que todo parece estar bien, debe actualizar todas las sucursales remotas:
Nota: - Es una operación compleja y debe ser consciente de lo que está haciendo. Primero intente hacerlo en un repositorio de demostración para ver cómo funciona. También debe informar a otros desarrolladores, de modo que no realicen ningún cambio mientras tanto.
fuente
--all
. Ahora dice todo actualizado cada vez que vuelvo a ejecutar push con ambos argumentos. Y el archivo no se elimina de otras ramas. ¿Qué debería hacer ahora?--tree-filter
lugar de me--index-filter
gusta en la respuesta de @ PetroFranko?elimine el archivo y reescriba el historial de la confirmación que realizó con el archivo eliminado (esto creará un nuevo hash de confirmación desde el archivo que confirmó):
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
ahora fuerza empujar el repositorio:
git push origin --force --all
ahora dile a tus colaboradores que lo hagan
rebase
.fuente
El uso del paquete bfg repo-cleaner es otra alternativa viable a
git-filter-branch
. Al parecer, también es más rápido ...fuente
.gitignore
archivo y no olvide enviar el archivo :-)Puede usar este sitio: http://gtiignore.io para generar el
.gitignore
para usted y agregar la ruta requerida a sus archivos / carpetas binariosUna vez que haya agregado el archivo
.gitignore
, puede eliminar el archivo binario "antiguo" con BFG.How to remove big files from the repository
Puede utilizar
git filter-branch
o BFG. https://rtyley.github.io/bfg-repo-cleaner/Ejemplos (del sitio oficial)
fuente
Leí este artículo de GitHub , que me llevó al siguiente comando (similar a la respuesta aceptada, pero un poco más robusto):
fuente
git-repo-filter
git
recomienda usar git-filter-repo (cuandogit filter-branch
se ejecuta el comando). Hay una larga lista de por qué es mejor que cualquier otra alternativa ( https://github.com/newren/git-filter-repo#why-filter-repo-instead-of-other-alternatives ), mi experiencia es que es muy sencillo y muy rápido.Este comando elimina el archivo de todas las confirmaciones en todas las ramas:
git filter-repo --path <path to the file or directory> --invert-paths
Se pueden especificar varias rutas utilizando varios
--path
parámetros. Puede encontrar documentación detallada aquí: https://www.mankier.com/1/git-filter-repofuente