Agregué accidentalmente una carpeta de imágenes y me comprometí. Luego, hice un compromiso más. Luego eliminé esos archivos usando git rm -f ./images
y comprometí nuevamente.
En este momento, he realizado muchas más confirmaciones en esa rama (maestra). En mi CABEZA, no tengo esa ./static/images
carpeta.
Debido a esto, el tamaño de mi repositorio ha aumentado mucho. ¿Cómo puedo eliminar esas manchas por completo? Y también quiero eliminarlo de mi repositorio remoto de GitHub.
git
git-remote
git-filter-branch
git-rm
Abhijeet Rastogi
fuente
fuente
Respuestas:
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 que debe usar:
git filter-branch --index-filter \ 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD
Además, para eliminar todos los archivos eliminados de los cachés que crea git, use:
Puede encontrar más información sobre el último comando, así como un script que hace todo lo que desea en una sola acción, aquí: git: eliminar para siempre archivos o carpetas del historial .
Otro enlace con mucha explicación: Eliminar datos sensibles .
[Editar] Además, vea esta pregunta de StackOverflow: Elimine los archivos confidenciales y sus confirmaciones del historial de Git .
(Comandos copiados de
natacado
la respuesta de la pregunta vinculada arriba.) Si ya eliminó los archivos de la copia de trabajo, lo siguiente debería funcionar. Descubra el hash de 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
fuente
Puede simplemente reajustar toda su rama y eliminar tanto la confirmación que agregó las imágenes como la confirmación que las eliminó.
Se le presentará una lista de confirmaciones. Elimina las líneas que tienen las confirmaciones falsas que deseas eliminar. ("dd" elimina una línea en vim, el editor predeterminado. Luego, guarde con ZZ)
Las confirmaciones colgantes luego se limpiarán en el curso de la recolección de basura git natural, un proceso que puede forzar con el comando dado en la respuesta de Darhuuk.
Editar: esto funcionará incluso si ha enviado 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 retirado de su rama. Deberían consultar "recuperándose de una rebase ascendente" .
Es de suponer que 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 el 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 puede dividir la confirmación con "git commit --amend".
fuente
Básicamente, estoy repitiendo 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, porque depende del shell que esté usando cómo se analizan las cadenas.
Linea sola:
Varias líneas:
fuente