Error al purgar el archivo del repositorio de Git, no se puede crear una nueva copia de seguridad


116

Intenté eliminar un archivo de mi repositorio remoto ejecutando:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Pero Git se queja de que

No se puede crear una nueva copia de seguridad. Ya existe una copia de seguridad anterior en refs / original /
Forzar la sobrescritura de la copia de seguridad con -f
rm: no se puede eliminar /.git-rewrite/backup-refs: Permiso denegado
rm: no se puede eliminar el directorio /.git-rewrite: El directorio no está vacío

Esto fue después de que ya borré el directorio .git-rewrite en Windows.

¿Cómo puedo eliminar ese archivo? Es un archivo de 29 Mb que se encuentra en mi repositorio, por lo que necesito eliminar el archivo.

Intenté eliminar la confirmación git rebase -i, pero aparentemente debido a que la confirmación tocó muchos archivos diferentes, Git se queja de los conflictos y aborté para estar seguro.


1
Para motores de búsqueda: esto también puede aplicarse cuando su mensaje de error es .git-rewrite already exists, please remove it.
Drew Noakes

Respuestas:


219

Ya ha realizado una operación de rama de filtro. Después de la rama de filtro, Git mantiene las referencias a las confirmaciones anteriores, en caso de que algo salga mal.

Puedes encontrarlos en .git/refs/original/…. Elimina ese directorio y todos los archivos que contiene, o usa la -fbandera para obligar a Git a eliminar las referencias antiguas.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

10
Finalmente lo puse a funcionar, ¡gracias! Probé la bandera -f, pero el problema era que la estaba poniendo al final del comando, por ejemplo. CABEZA -f. Ver tu orden me hizo intentar poner la bandera al principio, ¡y funcionó! = D
Cardin

12
opciones banderas ( -f) van antes de las refs ( HEAD). los
refs

Sigo recibiendo el mismo error después de agregar -f Y eliminar el directorio. ¿Algunas ideas?
Yaron

1
@knittl, no me refería git add. Recibí el mismo error que el póster original incluso después de eliminar la .git/refs/original/carpeta y usar la -fbandera en el git filter-branchcomando. La solución, en mi caso, fue borrar el .git/packed-refsarchivo.
Yaron

1
@knittl, encontré cómo solucionarlo, pero no encontré cuál era el problema. Básicamente, agregué --ignore-unmatchal comando git rmy fue sin problemas.
Gabrielius

21

Utilice este comando para eliminar la copia de seguridad original:

git update-ref -d refs/original/refs/heads/master

Aquí está la esencia que solía filtrar y ramificar mi repositorio git: https://gist.github.com/k06a/25a0214c98bc19fd6817


¡Esta es la solución adecuada para eliminar la copia de seguridad! Eliminar .git/refs/original/no resuelve el problema.
Erik Koopmans

Asegúrese de cambiar 'maestro' a la rama que está intentando arreglar ... en mi caso 'desarrollar'
Damian Green

git show-ref | awk '/ refs.original.refs/{print$2}'para encontrar todas las copias de seguridad que tiene su repositorio.
Dan

4

Tuve el mismo problema y la respuesta anterior no lo solucionó. No quedaba ningún directorio .git / refs / original /. La solución para mí fue eliminar el archivo .git / pack-refs.


El mismo problema. Sin .git/packed-refsembargo, no hay archivo ni carpeta originalen .git/refs. ¿Nadie?
XedinUnknown

Resuelto aquí agregando la -rbandera al comando.
XedinUnknown

El mismo problema aqui. Eliminar las referencias empaquetadas resolvió el problema, pero también arruinó el resto de mi directorio git y tuve que restaurar desde la copia de seguridad.
Kevin Yin

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.