Cuando intento confirmar los cambios, aparece este error:
error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt
¿Alguna idea de cómo resolver este error?
EDITAR
Intenté git fsck
tengo:
error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt
git add
operación? ¿Está lleno su disco duro?git fsck
se encargaron de ello.Respuestas:
Tuve un problema similar. Mi computadora portátil se quedó sin batería durante una operación git. Abucheo.
No tenía ninguna copia de seguridad. (NB Ubuntu One no es una solución de respaldo para git; útilmente sobrescribirá su repositorio cuerdo con el corrupto).
Para los magos git, si esta fue una mala manera de solucionarlo, por favor dejen un comentario. Sin embargo, funcionó para mí ... al menos temporalmente.
Paso 1: haga una copia de seguridad de .git (de hecho, hago esto entre cada paso que cambia algo, pero con un nuevo nombre de copia, por ejemplo .git-old-1, .git-old-2, etc.) :
Paso 2: ejecutar
git fsck --full
Paso 3: elimine el archivo vacío. Pensé por qué no; está en blanco de todos modos.
Paso 3: corre de
git fsck
nuevo. Continúa eliminando los archivos vacíos. También puedecd
ingresar al.git
directorio y ejecutarfind . -type f -empty -delete -print
para eliminar todos los archivos vacíos. Finalmente, git comenzó a decirme que en realidad estaba haciendo algo con los directorios de objetos:Paso 4: Después de eliminar todos los archivos vacíos, finalmente llegué a
git fsck
ejecutar:Paso 5: Inténtalo
git reflog
. Fallo porque mi CABEZA está rota.Paso 6: Google. Encuentra esto . Obtenga manualmente las dos últimas líneas del reflog:
Paso 7: Tenga en cuenta que del Paso 6 aprendimos que HEAD está apuntando al último commit. Así que tratemos de ver el commit principal:
¡Funcionó!
Paso 8: Entonces, ahora debemos apuntar HEAD a 9f0abf890b113a287e10d56b66dbab66adc1662d.
Lo cual no se quejó.
Paso 9: mira lo que dice fsck:
Paso 10: el puntero sha1 no válido en el árbol de caché parecía que era de un archivo de índice ( fuente ) ahora desactualizado . Así que lo maté y reinicié el repositorio.
Paso 11: Mirando el fsck nuevamente ...
Las gotas colgantes no son errores . No estoy preocupado por master.u1conflict, y ahora que está funcionando, ¡ya no quiero tocarlo!
Paso 12: Ponerme al día con mis ediciones locales:
Espero que eso pueda ser de alguna utilidad para las personas en el futuro. Me alegra que haya funcionado.
fuente
Los archivos de objetos git se han dañado (como se señala en otras respuestas también). Esto puede suceder durante bloqueos de la máquina, etc.
Yo tuve lo mismo. Después de leer las otras respuestas principales aquí, encontré la forma más rápida de arreglar el repositorio de git roto con los siguientes comandos (ejecutar en el directorio de trabajo de git que contiene la
.git
carpeta):Esto eliminará primero los archivos de objetos vacíos que causen la corrupción del repositorio en su conjunto, y luego buscará los objetos faltantes (así como los últimos cambios) del repositorio remoto y luego realizará una comprobación completa del almacén de objetos . Lo cual, en este punto, debería tener éxito sin ningún error (¡aunque puede haber algunas advertencias!)
fuente
Este error me ocurre cuando estoy presionando mi confirmación y mi computadora se cuelga. Así es como lo solucioné.
Pasos para arreglar
muestra el archivo de objeto vacío / corrupto
eliminarlo
Recibí un
fatal: bad object HEAD
mensajeElimino el
index
para el reiniciofatal: no se pudo analizar el objeto 'HEAD'.
solo para ver qué pasa
imprime las últimas 2 líneas
tail -n 2
de rama de registro para mostrar mis 2 últimascommit hash
Elijo el último
commit hash
muestra todo mi archivo como
deleted
porque eliminé el.git/index
archivocontinuar con el reinicio
verificar mi arreglo
Nota: Los pasos comienzan cuando llegué a esta pregunta y usé las respuestas como referencia.
fuente
Resolví esto eliminando los diversos archivos vacíos que git fsck estaba detectando, y luego ejecuté un simple git pull.
Me parece decepcionante que ahora que incluso los sistemas de archivos implementan el registro en diario y otras técnicas "transaccionales" para mantener la salud mental, git puede llegar a un estado corrupto (y no ser capaz de recuperarse por sí mismo) debido a una falla de energía o espacio en el dispositivo.
fuente
Acabo de tener el mismo problema: después de extraer el repositorio distante, cuando hice un estado git obtuve: "error: el archivo de objeto (...) está vacío" "fatal: el objeto suelto (...) está dañado"
La forma en que resolví esto fue:
No sé exactamente qué sucedieron, pero esas instrucciones parecían aclarar todo.
fuente
cd .git/ && find . -type f -empty -delete
Debido a que tengo que reiniciar mi VM con regularidad, de alguna manera este problema me ocurre muy a menudo. Después de algunas veces, me di cuenta de que no puedo repetir el proceso descrito por @ Nathan-Vanhoudnos cada vez que esto sucede, aunque siempre funciona. Luego descubrí la siguiente solución más rápida.
Paso 1
Mueva su repositorio completo a otra carpeta.
Paso 2
Clonar el repositorio desde el origen nuevamente.
Paso 3
Elimine todo en el nuevo repositorio excepto la carpeta .git .
Paso 4
Mueva todo desde temp_repo al nuevo repositorio excepto la carpeta .git .
Paso 5
Elimine el temp_repo , y hemos terminado.
Después de algunas veces, estoy seguro de que puede realizar estos procedimientos muy rápidamente.
fuente
git clone source_to_current_repo.git clean_repo
, 2) haga una copia de seguridad de la carpeta .git anterior, 3) copie sobre la carpeta limpia .git.Eso es todo. Quizás no sea la mejor manera, pero creo que es muy práctico.
fuente
En mi caso, este error ocurrió porque estaba escribiendo el mensaje de confirmación y mi computadora portátil se apagó.
Hice estos pasos para corregir el error:
git checkout -b backup-branch
# Crear una rama de respaldogit reset --hard HEAD~4
# Restablecer el commit donde todo funciona bien. En mi caso, tuve que respaldar 4 commits en la cabeza, es decir, hasta que mi cabeza estuviera en el punto antes de escribir el mensaje de confirmación. Antes de hacer este paso, copie el hash de los commits que restablecerá, en mi caso copié el hash de los 4 últimos commitsgit cherry-pick <commit-hash>
# Cherry selecciona los commits reseteados (en mi caso son 4 commits, así que hice este paso 4 veces) de la rama anterior a la nueva rama.git push origin backup-branch
# Empuje la nueva sucursal para asegurarse de que todo funcione biengit branch -D your-branch
# Eliminar la rama localmente ('your-branch' es la rama con el problema)git push origin :your-branch
# Eliminar la rama del control remotogit branch -m backup-branch your-branch
# Cambie el nombre de la rama de respaldo para que tenga el nombre de la rama que tuvo el problemagit push origin your-branch
# Empuje la nueva ramagit push origin :backup-branch
# Eliminar la rama de respaldo del control remotofuente
resuelve mi problema
fuente
git status
ya que algunos están vacíos.Aquí hay una manera realmente simple y rápida de tratar este problema SI tiene un repositorio local con todas las ramas y compromisos que necesita, y si está de acuerdo con crear un nuevo repositorio (o eliminar el repositorio del servidor y hacer uno nuevo) en su lugar):
Esto conserva todo el historial de confirmación y las ramas que tenía en su repositorio local.
Si tiene colaboradores en el repositorio, creo que en muchos casos todo lo que sus colaboradores tienen que hacer es cambiar también la URL remota de su repositorio local y, opcionalmente, enviar las confirmaciones que tengan que el servidor no tiene.
Esta solución funcionó para mí cuando me encontré con este mismo problema. Tuve un colaborador. Después de enviar mi repositorio local al nuevo repositorio remoto, simplemente cambió su repositorio local para que apuntara a la URL del repositorio remoto y todo funcionó bien.
fuente
Tuve el mismo problema después de que mi computadora portátil se estrellara. Probablemente debido a que era un repositorio grande, tenía bastantes archivos de objetos corruptos, que solo aparecían uno a la vez cuando llamaba
git fsck --full
, así que escribí un pequeño shell de una línea para eliminar automáticamente uno de ellos:$ sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`
2>&1
redirige el mensaje de error a stdout para poder grep-o
solo devuelve la parte de una línea que realmente coincide-E
habilita expresiones regulares avanzadas-m 1
asegúrese de que solo se devuelva el primer partido[0-9a-f]{2}
coincide con cualquiera de los caracteres entre 0 y 9 y a y f si dos de ellos aparecen juntos[0-9a-f]*
coincide con cualquier número de caracteres entre 0 y 9 y a y f aparecen juntosTodavía solo elimina un archivo a la vez, por lo que es posible que desee llamarlo en un bucle como:
$ while true; do sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`; done
El problema con esto es que ya no genera nada útil, por lo que no sabe cuándo está terminado (simplemente no debería hacer nada útil después de un tiempo)
Para "arreglar" esto, simplemente agregué una llamada
git fsck --full
después de cada ronda así:$ while true; do sudo rm `git fsck --full 2>&1 | grep -oE -m 1 ".git/objects/[0-9a-f]{2}/[0-9a-f]*"`; git fsck --full; done
Ahora es aproximadamente la mitad de rápido, pero genera su "estado".
Después de esto, jugué con algunas sugerencias en este hilo y finalmente llegué a un punto en el que pude
git stash
ygit stash drop
muchas de las cosas rotas.primer problema resuelto
Después todavía tenía el siguiente problema:
unable to resolve reference 'refs/remotes/origin/$branch': reference broken
que podría resolverse con$ rm \repo.git\refs\remotes\origin\$branch
$ git fetch
Entonces hice un
$ git gc --prune=now
$ git remote prune origin
por si acaso y
git reflog expire --stale-fix --all
deshacerse de
error: HEAD: invalid reflog entry $blubb
cuando se ejecutagit fsck --full
.fuente
Vayamos de manera simple ... solo en caso de que hayas subido la fuente al repositorio remoto de git
revisa tu git
eliminar el archivo de objeto vacío (todo)
revisa tu git de nuevo.
saca tu fuente de git remoto
fuente
Me encuentro mucho con este problema con las máquinas virtuales.
Para mí los siguientes trabajos:
Si desea guardar algunas descargas, vaya a su explorador de archivos y elimine todos los archivos de la carpeta que ya están confirmados y deje en sus carpetas / vendor y / node_modules (trabajo con el compositor y npm).
entonces solo crea un nuevo repositorio
agrega tu control remoto
y buscar la rama / todo
y échale un vistazo
entonces deberías estar en el punto antes del error.
Espero que esto ayude.
Saludos.
fuente
Me encuentro con el mismo problema, y uso una forma muy simple de solucionarlo. Descubrí que esos archivos faltantes existían en la computadora de mi compañero de equipo.
Yo copié los archivos uno a uno a un servidor Git (9 archivos en total), y que solucionó el problema.
fuente
Mis colegas y yo nos hemos cruzado varias veces con este mismo problema y para resolverlo simplemente hacemos los pasos que describo a continuación. No es la solución más elegante que se puede encontrar, pero funciona sin pérdida de datos.
old_project
para este ejemplo).git clone
.old_project
(excepto el.git
directorio) al directorio del proyecto recién creado.Espero que ayude...
fuente
Aquí hay una manera de resolver el problema si su repositorio público en github.com está funcionando, pero su repositorio local está corrupto. Tenga en cuenta que perderá todas las confirmaciones que ha realizado en el repositorio local.
Muy bien, tengo un repositorio local que me da esto
object empty error
, y el mismo repositorio en github.com, pero sin este error. Entonces, lo que simplemente hice fue clonar el repositorio que funciona desde github, y luego copié todo desde el repositorio corrupto (excepto la carpeta .git), y pegué el repositorio clonado que funciona.Esto puede no ser una solución práctica (ya que elimina las confirmaciones locales), sin embargo, mantiene el código y un control de versión reparado.
Recuerde hacer una copia de seguridad antes de aplicar este enfoque.
fuente
En mi caso, no era importante para mí mantener el historial de confirmación local. Entonces, si eso también se aplica a usted, puede hacer esto como una alternativa rápida a las soluciones anteriores:
Básicamente, simplemente reemplaza el
.git/
directorio dañado por uno limpio.Supongamos el siguiente directorio para su proyecto con el git dañado:
projects/corrupt_git/
cp projects/corrupt_git projects/backup
- (opcional) hacer una copia de seguridadgit clone [repo URL] projects/clean_git
- para que consigasprojects/clean_git
rm -rf corrupt_git/.git/
- eliminar la carpeta corrupta .gitmv clean_git/.git/ corrupt_git/
- mover git limpio acorrupt_git/.git
git status
enprojects/corrupt_git
- para asegurarse de que funcionófuente
Copie todo (en la carpeta que contiene el .git) a una copia de seguridad, luego elimine todo y reinicie. Asegúrese de tener el control remoto git a mano:
Entonces
Luego combine los archivos nuevos manualmente e intente mantener su computadora encendida.
fuente
Tuve el mismo problema después de retirar el maestro de una rama limpia. Después de un tiempo reconocí muchos archivos modificados en master. No sé por qué han estado allí, después de cambiar de una rama limpia. De todos modos, debido a que los archivos modificados no tenían sentido para mí, simplemente los escondí y el error desapareció.
git:(master) git stash
fuente
si tiene una copia de seguridad ANTIGUA y tiene prisa:
haga una NUEVA COPIA DE SEGURIDAD de su ruta de proyecto actual, rota por git.
.git
a la papelera (nunca eliminar).git
de la copia de seguridad ANTIGUAgit pull
(creará conflictos de fusión)./src
(nunca elimine)git gui
, empuja y ... ¡aplaude!fuente
La solución de doce pasos cubierta anteriormente también me ayudó a salir de un atasco. Gracias. Los pasos clave fueron ingresar:
y eliminar todos los objetos vacíos
Luego obteniendo las dos líneas del flog:
Con los valores devueltos
En este punto no tenía más errores, así que hice una copia de seguridad de mis archivos más recientes. Luego haz un git pull seguido de un git push. Copié mis copias de seguridad en mi archivo de repositorio git e hice otro empuje git. Eso me puso al corriente.
fuente
Arreglé mi error de git: el archivo de objeto está vacío por:
Espera que esto ayude.
fuente
Esto también me pasa casi regularmente. No he hecho un protocolo cuando esto sucede exactamente, pero sospecho que ocurre cada vez que mi máquina virtual existe "inesperadamente". Si cierro la ventana de VM (estoy usando Ubuntu 18.04) y empiezo de nuevo, las cosas siempre funcionan (?). Pero si la ventana de VM todavía está abierta cuando mi computadora portátil se apaga (sistema host de Windows), entonces encuentro este problema con bastante frecuencia.
En cuanto a todas las respuestas dadas aquí:
gracias, son muy útiles; Por lo general, guardo una copia local de mi código, restauro el repositorio desde el control remoto y muevo la copia de respaldo a la carpeta local.
Como el problema subyacente no es realmente un problema de git, sino más bien un problema de VM y / o Linux, me pregunto si no debería haber una manera de curar la razón, sino los síntomas. ¿Este tipo de error no indica que algunos cambios en el sistema de archivos no se "aplican" en un tiempo razonable, sino que solo se almacenan en caché? (ver por ejemplo /unix/464184/are-file-edits-in-linux-directly-saved-into-disk ) - para mí parece que las máquinas Linux virtuales no fsynch sus cosas con suficiente frecuencia. Si esto es un problema de VirtualBox de Oracle (que de otro modo funciona muy bien) o del sistema de archivos invitado, o de algunas configuraciones, que todos pasamos por alto, está más allá de mi experiencia. Pero sería feliz si alguien pudiera arrojar luz sobre esto.
fuente
En realidad tuve el mismo problema. Tenga una copia de su código antes de intentar esto.
Lo acabo de hacer
git reset HEAD~
mi último compromiso se deshizo y luego lo cometí nuevamente, ¡problema resuelto!
fuente
Advertencia: con más experiencia, me doy cuenta de que esta es la opción nuclear y, por lo general, no debe hacerse y no enseña nada. Sin embargo, en raras ocasiones para proyectos personales, todavía lo encuentro útil, así que lo dejo.
Si no le importa mantener sus confirmaciones históricas, simplemente ejecute
Luego responda sí a cualquier pregunta sobre la eliminación de archivos protegidos contra escritura. Problema resuelto en menos de un minuto.
fuente