tag - qué tipos de etiquetas existen en git
Elimina por completo los archivos del repositorio de Git y a distancia en GitHub (3)
Accidentalmente agregué una carpeta de imágenes y me comprometí. Luego, hice un compromiso más. Luego git rm -f ./images
esos archivos usando git rm -f ./images
y me comprometí nuevamente.
En este momento, he hecho muchos más commits en esa rama (maestro). En mi HEAD, no tengo esa carpeta ./static/images
.
Debido a esto, mi tamaño de repo ha aumentado mucho. ¿Cómo puedo eliminar esos blobs por completo? Y también quiero eliminarlo de mi repositorio remoto de GitHub.
Básicamente, repito la respuesta combinada con esta advertencia de formato de Windows , solo para que no se pierda como comentario.
Tenga en cuenta el uso de comillas dobles en lugar de comillas simples, ya que depende del shell que está utilizando cómo se analizan las cadenas.
Linea sola:
git filter-branch --index-filter "git rm -r --cached --ignore-unmatch <file/dir>" HEAD
Múltiples líneas:
git filter-branch --index-filter /
"git rm -r --cached --ignore-unmatch <file/dir>" HEAD
Esto es lo que está buscando: ignorar no elimina un archivo . Le sugiero que lea esa página, pero aquí está el comando específico para usar:
git filter-branch --index-filter /
''git rm -r --cached --ignore-unmatch <file/dir>'' HEAD
Además, para eliminar todos los archivos eliminados de las cachés que crea git, use:
rm -rf .git/refs/original/ && /
git reflog expire --all && /
git gc --aggressive --prune
Puede encontrar más información sobre el último comando, así como una secuencia de comandos que hace todo lo que quiere en una sola acción, aquí: git: eliminar para siempre los archivos o carpetas del historial .
Otros enlaces con muchas explicaciones: elimine datos confidenciales .
[Editar] Además, consulte esta pregunta de : elimine los archivos confidenciales y sus confirmaciones del historial de Git .
(Comandos copiados de la natacado
de natacado
en la pregunta vinculada anteriormente). Si ya ha eliminado los archivos de la copia de trabajo, lo siguiente debería funcionar. Descubre el hash para la confirmación que agregó los archivos no deseados. Entonces hazlo:
git filter-branch --index-filter /
''git update-index --remove filename'' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Podrías simplemente volver a establecer la base de toda la sucursal y eliminar tanto la confirmación que agregó las imágenes como la confirmación que las eliminó.
git rebase -i master
Se te presentará una lista de confirmaciones. Elimine las líneas que tienen las confirmaciones fraudulentas que desea eliminar. ("dd" borra una línea en vim, el editor predeterminado. Luego, guarde con ZZ)
Los commit colgantes se limpiarán en el transcurso de la recolección de basura natural de git, un proceso que puedes forzar con el comando dado en la respuesta de Darhuuk.
Editar: Esto funcionará incluso si ha presionado a un repositorio remoto, pero tendrá que presionar con --force. (Lo mismo se aplica a la solución git filter-branch).
Tenga en cuenta que esto será muy molesto para cualquiera que haya sacado de su sucursal. Deben consultar "recuperación de rebase aguas arriba" .
Presumiblemente, su adición accidental original de imágenes es parte de un compromiso que desea mantener. En este caso, debe editar la confirmación durante la rebase para dividir las partes que desea conservar. Puede hacer esto reemplazando "pick" en la lista "rebase -i" para esa confirmación con "e" (para editar). El proceso de rebase se detendrá aquí y puedes dividir la confirmación con "git commit --amend".