Mi confirmación inicial contenía algunos archivos de registro. He agregado *log
a mi .gitignore
, y ahora quiero eliminar los archivos de registro de mi repositorio.
git rm mylogfile.log
eliminará un archivo del repositorio, pero también lo eliminará del sistema de archivos local.
¿Cómo puedo eliminar este archivo del repositorio sin eliminar mi copia local del archivo?
git
repository
remote-server
delete-file
git-rm
mveerman
fuente
fuente
Respuestas:
Del archivo man :
Entonces, para un solo archivo:
y para un solo directorio:
fuente
svn rm --keep-local
.git pull
si está detrás de la confirmación despuésgit rm
git commit -m "Commit message"
ygit push
. Si tiene otros cambios por etapas (consulte congit status
), también se confirmarán en este momento.git rm --cached mylogfile.log
y elimino el archivo del repositorio. Para evitar perder el archivo en un sistema productivo, hago una copia de seguridad del archivo y lo extraigo. El archivo se elimina como se mencionó anteriormente y debe copiarse nuevamente desde su copia de seguridad. Esto es bastante doloroso, pero no encontré una mejor solución para este problema.Para eliminar una carpeta completa del repositorio (como archivos Resharper), haga esto:
Había comprometido algunos archivos de intercambio y no quería que persistieran para otros usuarios del proyecto.
fuente
Git Push repo branch
para eliminar realmente los archivos del control remoto.También puede eliminar archivos del repositorio en función de su .gitignore sin eliminarlos del sistema de archivos local:
O, alternativamente, en Windows Powershell:
fuente
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
. Considere modificar o agregar esta solución a la respuesta aquí, porque es una gran herramienta para tener ....gitkeep
que conservan una carpeta vacía en el repositorio. P.ej..gitignore
contener carpetauploads
y el repositorio se ve obligado a realizar un seguimiento.gitkeep
. Al eliminar todo del repositorio debajo,uploads
también se eliminará.gitkeep
.Según mi respuesta aquí: /programming/6313126/how-to-remove-a-directory-in-my-github-repository
Para eliminar la carpeta / directorio o archivo solo del repositorio de git y no del local, intente con 3 simples pasos.
Pasos para eliminar el directorio
Pasos para ignorar esa carpeta en las próximas confirmaciones
El archivo .gitignore se verá así
fuente
Además, si ha confirmado datos confidenciales (por ejemplo, un archivo que contiene contraseñas), debe eliminarlos completamente del historial del repositorio. Aquí hay una guía que explica cómo hacerlo: http://help.github.com/remove-sensitive-data/
fuente
Una solución más genérica:
Editar
.gitignore
archivoECHO mylogfile.log >> .gitignore
Eliminar todos los elementos del índice.
git rm -r -f --cached .
Reconstruir índice.
git add .
Hacer un nuevo compromiso
git commit -m "Removed mylogfile.log"
fuente
rm --cashed
es que eventualmente eliminará el archivo cuando se tire, ¿verdad? Y esto no es lo que la gente quiere cuando dice "Eliminar un archivo del repositorio sin eliminarlo del sistema de archivos local ". Ahora, ¿por qué la solución arriba aceptada está más allá de mí? ¿Probablemente el OP estaba trabajando solo y nunca lo hizo? No sé. Entiendo la github "una vez empujado siempre allí" cuestión OFC(Desde https://help.github.com/articles/ignoring-files )
Por lo tanto, no lo elimina, sino que ignora los cambios para siempre. Creo que esto solo funciona localmente, por lo que los compañeros de trabajo aún pueden ver cambios a menos que ejecuten el mismo comando que el anterior. (Sin embargo, aún tengo que verificar esto).
Nota: Esto no responde la pregunta directamente, sino que se basa en preguntas de seguimiento en los comentarios de las otras respuestas.
fuente
Si solo desea eliminar un archivo y no eliminarlo del repositorio local y remoto, use este comando:
fuente
Las respuestas anteriores no funcionaron para mí. Solía
filter-branch
eliminar todos los archivos comprometidos.Eliminar un archivo de un repositorio git con:
Eliminar una carpeta de un repositorio git con:
Esto elimina el directorio o archivo de todas las confirmaciones.
Puede especificar una confirmación utilizando:
O un rango:
Para llevar todo al control remoto, puede hacer:
fuente
git rm -r --cached NAME
es el truco para sacarlo de su repositorio git local y evitar que afecte a cualquiera que tira después (mediante la supresión de la historia del archivo o directorio desde git.)Ignore los archivos, elimine los archivos de git, actualice git (para la eliminación).
Nota: esto no trata con el historial de información confidencial.
Este proceso definitivamente requiere algo de comprensión de lo que está sucediendo con git. Con el tiempo, después de ganar eso, aprendí a hacer procesos como:
1) Ignorar los archivos
.gitignore
para ignorarlos, en muchos casos, como el suyo, el directorio principal, p. Ej.log/
, será la expresión regular a utilizar..gitignore
cambio de archivo (no estoy seguro de si se necesita empujar, no hay daño si se hace).2) Eliminar los archivos de git (solo).
git remove --cached some_dir/
3) Agregue y confirme ese cambio (¡esencialmente este es un cambio para "agregar" eliminando cosas, a pesar del comando "agregar" que de otro modo sería confuso)
git add .
git commit -m"removal"
fuente