Me comprometí y empujé un directorio a github. Después de eso, modifiqué el .gitignore
archivo agregando un directorio que debería ignorarse. Todo funciona bien, pero el directorio (ahora ignorado) permanece en github.
¿Cómo elimino ese directorio de github y el historial del repositorio?
Respuestas:
Las reglas en su
.gitignore
archivo solo se aplican a los archivos no rastreados. Dado que los archivos en ese directorio ya estaban confirmados en su repositorio, debe quitar la etapa, crear un compromiso y enviarlo a GitHub:No puede eliminar el archivo de su historial sin volver a escribir el historial de su repositorio; no debe hacerlo si alguien más está trabajando con su repositorio, o si lo está utilizando desde múltiples computadoras. Si aún desea hacer eso, puede usarlo
git filter-branch
para reescribir el historial; aquí encontrará una guía útil .Además, tenga en cuenta que la salida de
git rm -r --cached some-directory
será algo así como:El
rm
es comentarios de git sobre el repositorio; los archivos todavía están en el directorio de trabajo.fuente
-r
y--cached
. Gracias.-r
significa recursivo, necesario si estás haciendo directorios completos.--cached
anula el comportamiento normal de git de eliminarlos del directorio de trabajo y organizar la eliminación para confirmar, y hace que git solo opere en el área de preparación lista para la confirmación. Es cómo le dices a git que quieres conservar tus copias locales de los archivos.git reset name_of_file
para que lo que se describe arriba funcioneHago esto:
Lo que eliminará todos los archivos / carpetas que están en su git ignore, lo que le ahorrará tener que elegir cada uno manualmente
Esto parece haber dejado de funcionar para mí, ahora lo hago:
fuente
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
Según mi respuesta aquí: ¿Cómo eliminar un directorio del repositorio de git?
Para eliminar la carpeta / directorio solo del repositorio de git y no del local, intente 3 pasos simples.
Pasos para eliminar el directorio
Pasos para ignorar esa carpeta en las próximas confirmaciones
El archivo .gitignore se verá así
fuente
La primera respuesta de Blundell no funcionó para mí. Sin embargo, me mostró el camino correcto. He hecho lo mismo así:
Le aconsejo que compruebe los archivos que se eliminarán primero ejecutando la siguiente declaración:
Estaba usando un archivo .gitignore predeterminado para Visual Studio y noté que estaba eliminando todas las carpetas de registro y bin en el proyecto, lo cual no era mi acción prevista.
fuente
Nota: Esta solución solo funciona con Github Desktop GUI .
Al usar Github Desktop GUI es muy simple.
Mueva la carpeta a otra ubicación (fuera de la carpeta del proyecto) temporalmente.
Edite su
.gitignore
archivo y elimine la entrada de carpeta que sería eliminar el repositorio maestro en la página de github.Confirmar y sincronizar la carpeta del proyecto.
Vuelva a mover la carpeta a la carpeta del proyecto
Reeditar
.gitignore
archivo.Eso es todo.
fuente
La respuesta de Blundell debería funcionar, pero por alguna extraña razón no funcionó conmigo. Primero tuve que canalizar los nombres de archivo generados por el primer comando en un archivo y luego recorrer ese archivo y eliminar ese archivo uno por uno.
fuente
Si también necesita purgar los archivos recién ignorados del historial de confirmaciones de la rama o si no desea que los archivos ignorados recientemente se eliminen de futuras extracciones , consulte esta respuesta .
fuente
Si está trabajando desde PowerShell, intente lo siguiente como un solo comando.
Entonces,
git push --force --all
.Documentación: https://git-scm.com/docs/git-filter-branch
fuente
git filter-branch
diferencia el uso del usogit rm
? Originalmente pensaba que tenía que usar una versión de,git filter-branch
pero la mayoría de los comentarios aquí recomiendan usargit rm
. Por lo que entiendo,git rm
solo lo elimina del directorio de trabajo actual y del índice. Pero si se agregan múltiples confirmaciones antes, todavía estará en el repositorio.git rm
eliminará el archivo de la última confirmación en el futuro.git filter-branch
nos permite eliminarlo de toda la historia. Ver también: help.github.com/articles/…