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.
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 rebaseentoncesgit push -ffilter-branchmétodo descrito en el duplicado sugerido hará lo que desee.git filter-branchRespuestas:
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>..HEADy ahorre algo de tiempo.git push --forceSi ha confirmado recientemente ese archivo, o si ese archivo ha cambiado en una o dos confirmaciones, le sugiero que use
rebaseycherrypickpara 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-filterlugar de me--index-filtergusta 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 -- --allahora fuerza empujar el repositorio:
git push origin --force --allahora 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
.gitignorearchivo y no olvide enviar el archivo :-)Puede usar este sitio: http://gtiignore.io para generar el
.gitignorepara 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 repositoryPuede utilizar
git filter-brancho 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
gitrecomienda usar git-filter-repo (cuandogit filter-branchse 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-pathsSe pueden especificar varias rutas utilizando varios
--pathparámetros. Puede encontrar documentación detallada aquí: https://www.mankier.com/1/git-filter-repofuente