git - sesion - ¿Cómo eliminar "fatal: objeto suelto"?
github/new (5)
Uno de mis repositorios clonados está obteniendo esto de un git fsck
fatal: objeto suelto 40bda4e3b79c3d7bf598df31d9e68470f97a3f79 (almacenado en .git / objects / 40 / bda4e3b79c3d7bf598df31d9e68470f97a3f79) está dañado
Tengo otra copia de eso que fsck está limpiamente.
He intentado oprimir el directorio / subdirectorios que contienen el fatal, y volver a iniciarlo. El problema continúa.
Realmente no me importa ningún archivo en particular, solo quiero que el repositorio compruebe de forma limpia. ¿Qué debo hacer?
Nota: el repositorio remoto está alojado en github.
Haga git checkout
a la otra rama, obtendrá una lista de los archivos modificados, simplemente los confirma y empuja en la rama. Si haces esto, el problema se resolverá, la próxima vez que hagas algunos cambios, el git status
debería funcionar.
La idea es:
- primero elimine sus registros de git actuales que residen en su
.git
bajo su proyecto actual (denotémoslo por "proyecto A"). - Haga una copia de su proyecto actual, denotamos el duplicado como "proyecto B".
- Ahora
cd
en el proyecto A y git clone y reinicie a la última confirmación. - Copie todos los archivos del proyecto B y reemplácelos en el proyecto A.
- Ahora
cd
en el proyecto A y use elgit status
para ver el estado del proyecto A. Debe ser como si no hubiera habido corrupción alguna vez.
En resumen, haga una copia para reservar su área de trabajo actual, y combínela con un clon nuevo reemplazando los archivos y luego haga frente a sus cambios como siempre.
Aquí está en acción:
Primero veo que tengo una corrupción (lo cual se debe a que forzé mi máquina virtual a apagarse de forma inadecuada ayer: P):
✘ domicor @ ubuntu ~ / dotfiles maestro ● git status de error: objeto de archivo .git / objetos / cd / 593f6db1d5050406e15b9c80d215fd48db39f4 está vacía error: objeto de archivo .git / objetos / cd / 593f6db1d5050406e15b9c80d215fd48db39f4 está vacía fatal: suelta cd593f6db1d5050406e15b9c80d215fd48db39f4 objeto (almacenada en .git / objects / cd / 593f6db1d5050406e15b9c80d215fd48db39f4) está dañado
Haga una copia de mi carpeta de
dotfiles
dedotfiles
y ahora elimine la carpeta.git
.$ cd ~ / dotfiles $ rm -rf .git
A continuación, vuelva a crear un repositorio git.
$ git init
Añadir un mando a distancia.
$ git remoto agregar origen [email protected]: domicor / dotfiles.git
Fetch desde el control remoto.
$ git fetch
Aquí hay una captura de pantalla de los comandos anteriores:
Ahora reinicia la CABEZA.
$ git reset - hard origin / master
Observe que justo después de que obtuve el control remoto
git status
un comandogit status
para verificar el estado de mi repositorio. Puedes ver que todos los archivos están sin seguimiento. Y la primera parte del indicador de la línea de comandos es naranja desde mi comandogit init
hasta el comandogit reset
que indica que cuando inicialicé mi repositorio, git detectó los archivos y después del restablecimiento, todos los archivos se restaurarán al estado de HEAD, por lo tanto el indicador verde .Establecer la rama aguas arriba:
$ git branch --set-upstream-to = origin / master master
Ahora copie sus archivos desde la carpeta de copia de seguridad (para mí son
dotfiles (copy)
dedotfiles (copy)
) manualmente o a través de la línea de comandos para reemplazar los archivos en la carpeta de archivos dedotfiles
. Compruebe el estado y debería haber cambios al igual que mi captura de pantalla:Ahora puede obtener
git diff your-filename
para ver si sus cambios se aplican correctamente y puede agregar archivos y confirmar a partir de ahora. / o /
Para entenderlo mejor, el git VCS simplemente registra sus cambios. Cuando el VCS está dañado, sus archivos aún están seguros. Todavía están allí cuando los dejaste. Entonces, haga una copia de seguridad de sus archivos y restaure los registros de git de otros lugares y git puede comparar la copia de restauración con el estado actual de su archivo y tener ideas sobre lo que ha cambiado, tal como lo hizo antes de la corrupción. Y vítores
La respuesta más simple es "rm -rf .git ..." http://www.bazhukov.net/2015/02/git-corrupt-loose-object/
Primero, puedes revisar el sistema de archivos para ver si hay errores: fsck -y
A continuación, compruebe el repositorio git fsck
: git fsck
Respuesta fácil: aleja el viejo repo y reclona. Si tiene cosas en el antiguo repositorio que desea conservar, hay formas de obtenerlas, pero primero obtenga un buen repo.