¿Volver atrás en la historia a una versión sin daños?

Tengo un object suelto corrupto.

Intenté pagar, revertir, rebase y pueden ser algunas otras cosas para ir a una confirmación original. En cada caso, ejecuté git fsck y todavía tenía el mismo problema:

 > git fsck error: corrupt loose object '25a196217ebb6e341909205575f491022eafc4d9' fatal: loose object 25a196217ebb6e341909205575f491022eafc4d9 (stonetworking in .git/objects/25/a196217ebb6e341909205575f491022eafc4d9) is corrupt 

¿Hay alguna manera de deshacerse de los objects corruptos sin simplemente eliminar .git? No tengo otra copy de security, así que no puedo replace el object dañado.

Es una pregunta más limitada que surgió de este error "git: object suelto corrupto" después de mover un directory

actualización (1):

 > git gc Counting objects: 747, done. Delta compression using up to 8 threads. error: corrupt loose object '25a196217ebb6e341909205575f491022eafc4d9' fatal: loose object 25a196217ebb6e341909205575f491022eafc4d9 (stonetworking in .git/objects/25/a196217ebb6e341909205575f491022eafc4d9) is corrupt error: failed to run repack 

actualización (2): esto no funcionó Eliminar file del repository git (historial)

actualización (3): la clonación no funcionó:

 > git clone ../dynamicsCode_good/ . Cloning into .... done. error: corrupt loose object '25a196217ebb6e341909205575f491022eafc4d9' fatal: loose object 25a196217ebb6e341909205575f491022eafc4d9 (stonetworking in .git/objects/25/a196217ebb6e341909205575f491022eafc4d9) is corrupt 

el . directory está vacío

actualización (4): eliminación de un object dañado.

 > git --version git version 1.7.5.4 > rm -f .git/objects/25/a196217ebb6e341909205575f491022eafc4d9 13:42:57 ~/Dropbox/work/dev/dynamicsCode_torek > git fsck --full missing blob 25a196217ebb6e341909205575f491022eafc4d9 dangling tree 64a970c878fef7deeeb4ce2ffc5e6234a72894ad dangling tree 528e6c121fb8e56097462b2ebb9ec4de66388ce2 

primer comentario (inicial). este comentario ni siquiera tiene el file dañado.

 > git log |tail -5 commit 150ceebafb9c20769386cc7ffba07f6e6565fae6 Author: Kirill ...gmail.com> Date: Tue Sep 27 22:51:15 2011 -0400 state takes input as input checkout: > git checkout -b 150ceebafb9c20769386cc7ffba07f6e6565fae6 Switched to a new branch '150ceebafb9c20769386cc7ffba07f6e6565fae6' > git gc Counting objects: 783, done. error: unable to find 25a196217ebb6e341909205575f491022eafc4d9 Compressing objects: 100% (776/776), done. fatal: unable to read 25a196217ebb6e341909205575f491022eafc4d9 error: failed to run repack > git fsck --full broken link from tree 4668817140320ad2e04aa946d95dec2c3885d97b to blob 25a196217ebb6e341909205575f491022eafc4d9 missing blob 25a196217ebb6e341909205575f491022eafc4d9 dangling tree 64a970c878fef7deeeb4ce2ffc5e6234a72894ad dangling tree 528e6c121fb8e56097462b2ebb9ec4de66388ce2 

También intenté desempaquetar el único object en el .git/objects/pack/ . no ayudó.

También cloné este estado en un nuevo directory:

 > git gc Counting objects: 662, done. error: unable to find 25a196217ebb6e341909205575f491022eafc4d9 Compressing objects: 100% (656/656), done. fatal: unable to read 25a196217ebb6e341909205575f491022eafc4d9 error: failed to run repack 14:40:34 ~/Dropbox/work/dev/dynamicsCode_torek_commit_clone > git fsck broken link from tree b5ab6b287804d5069a3c8648ace38d9d9feac1a5 to blob 25a196217ebb6e341909205575f491022eafc4d9 dangling commit dad8edc620248d3911b7b1c0a99608a64e0288a3 missing blob 25a196217ebb6e341909205575f491022eafc4d9 dangling tree 64a970c878fef7deeeb4ce2ffc5e6234a72894ad dangling commit ae2b2a9edb744d9e91aa78891c849d5a0040ea94 dangling commit 32ed79bd4ac70b118d046cb6093a4710562e95ba dangling commit 7e45ef0c6ffc46401b1f82bcbf0f7e843abf9e31 dangling tree 528e6c121fb8e56097462b2ebb9ec4de66388ce2 14:40:40 ~/Dropbox/work/dev/dynamicsCode_torek_commit_clone > git branch * 150ceebafb9c20769386cc7ffba07f6e6565fae6 

tampoco ayudó.

El file dañado es tags de ctags. No lo necesito es extraño que no pueda rebuild git sin ese file. Lo que es más importante, de toda mi investigación no veo ni cómo se puede hacer ni por qué no es posible.

actualización (5): pago sin ramificación

 > git checkout 150ceebafb9c20769386cc7ffba07f6e6565fae6 Note: checking out '150ceebafb9c20769386cc7ffba07f6e6565fae6'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at 150ceeb... state takes input as input 16:41:40 ~/Dropbox/work/dev/dynamicsCode_torek_commit > git fsck --full broken link from tree 4668817140320ad2e04aa946d95dec2c3885d97b to blob 25a196217ebb6e341909205575f491022eafc4d9 missing blob 25a196217ebb6e341909205575f491022eafc4d9 dangling tree 64a970c878fef7deeeb4ce2ffc5e6234a72894ad dangling tree 528e6c121fb8e56097462b2ebb9ec4de66388ce2 

Si elimina manualmente el object dañado, git generalmente le permitirá acceder a todo lo demás. Deliberadamente corrompí un git blob (simplemente forcé algunos bytes malos en el frente) y obtuve lo siguiente:

 $ git fsck fatal: object bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad is corrupted $ git gc Counting objects: 23, done. error: unable to unpack bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad header error: inflateEnd: failed Delta compression using up to 2 threads. Compressing objects: 100% (12/12), done. fatal: object bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad is corrupted error: failed to run repack $ git fsck --full fatal: object bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad is corrupted $ rm -f .git/objects/bd/1b260b0ef92d1a219e1183953fa1ac7cdb4cad $ git fsck --full broken link from tree a3070cb66fd169e1443867a8bb137a44103c9f24 to blob bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad missing blob bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad $ git cat-file -p 2418b6ba8fd0289933c9351260a272b8e410867f tree a3070cb66fd169e1443867a8bb137a44103c9f24 parent 8d945134b0cead535d66af29c8eb4228b5dc3763 author [networkingacted] 1333789753 -0600 committer [networkingacted] 1333789753 -0600 test corrupted object $ git checkout 2418b6ba8fd0289933c9351260a272b8e410867f error: git checkout-index: unable to read sha1 file of morefile (bd1b260b0ef92d1a219e1183953fa1ac7cdb4cad) D morefile Note: checking out '2418b6ba8fd0289933c9351260a272b8e410867f'. You are in 'detached HEAD' state. ... 

Tenga en count que, en algún punto del path, volvió a apuntar el master sucursal a una confirmación "buena" previa (no la anterior inmediatamente, y no tengo idea de por qué) por lo que puede tener que reparar su historial de confirmaciones, etc. Pero todo estaba allí, excepto por el file "file adicional" que faltaba y cuyo blob corrompí. (Lo restauré de una copy de security que hice por adelantado e incluso pude recuperar el file, con el file de git checkout -- morefile . Puede ver el blob corrupto en alguna parte y ver si puede recuperar algunos de sus datos).

Ciertamente respaldaría el informe de git roto primero, Just In Case. 🙂