My machine had disk problems. I lost quite a bit of data and it seems I lost one of my git repositories as well.
git log | head error: Could not read 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc fatal: Failed to traverse parents of commit 92a2c1a74048cf8caec7ddd27f943652fab147ac
Analyzing the damage
The ref log apparently is still intact:
$ tail -n 3 .git/logs/refs/heads/master ba6111ef1ebafac3346f816f36c01bc4af6c2734 03c6b33d82e9e9ec1ecea4985fbe1cca994f44e2 Dirk Tilger 1299783879 +0400 commit: Virgin mono-basic checkin 03c6b33d82e9e9ec1ecea4985fbe1cca994f44e2 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc Dirk Tilger 1300007389 +0400 commit: Missing efreet dependency 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc 92a2c1a74048cf8caec7ddd27f943652fab147ac Dirk Tilger 1300007427 +0400 commit: Missing edje dependency
In the list above the first ID is the commit ID, the second ID is the tree ID. The most recent commit is the last one. The commit object 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc seems damaged:
git log 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc fatal: bad object 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc
The tree object 92a2c1a74048cf8caec7ddd27f943652fab147ac seems intact:
git ls-tree 92a2c1a74048cf8caec7ddd27f943652fab147ac 040000 tree a82504d023fe31e3ed093e58fc4872e5ccd7a4d9 app-portage 040000 tree 0a52ed4638173345b769ec17091db2285849c789 app-text 040000 tree febb17823eb11421f76188d9900c94d6528a6401 app-vim 040000 tree 466e19ae9676334eba999f20e51e6bbea5570933 dev-lang 040000 tree 78dd40b37ebc0cb9ccd59877b08658024416feab dev-libs 040000 tree 1d60e8774bd1ba9a2170c5507d5357bcfe7bd11d media-libs 040000 tree 29b1bb0b660a7a7006d2482a9c5703237e2c273f media-video 040000 tree 5da17094d77e36eb216074117b1fc869aa80b0ce www-plugins
The commit object 03c6b33d82e9e9ec1ecea4985fbe1cca994f44e2 seems not damaged:
git log --oneline 03c6b33d82e9e9ec1ecea4985fbe1cca994f44e2 | head 03c6b33 Virgin mono-basic checkin ba6111e Renamed mono ebuild to 9999 version 1fe38af Mono ebuild from the main tree 4835a15 Rename to git ebuild 7ca911f Moonlight ebuild from the main tree ef843f2 Added odf-converter ebuild from https://bugs.gentoo.org/show_bug.cgi?id=171182 3dce387 g-pypi from my modified pythonhead 1c0ffb8 Compiler plugin for PyLint ( http://www.logilab.org/projects/pylint/ ), a style checking tool for Python. 283897d Awesome. Completion with manual. : fa38747 vim tasklist greps out TODO and FIXME
The tree object 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc is damaged:
git ls-tree 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc fatal: not a tree object
So to repair this repository all we have to do is to recreate commit 2e3f651d6fdd1ca7604df1f3b1424a4c67095ccc by using the working tree object 92a2c1a74048cf8caec7ddd27f943652fab147ac.
What has been lost is one commit object. In theory we might be able to look for a tree object that is not referenced either by another tree object or a commit object. However, as in my case the last two commits actually had been accepted upstream, all I really need to do is to change the tip of my branch to before the damaged commit.
git branch -l before-efreet 03c6b33d82e9e9ec1ecea4985fbe1cca994f44e2
When I now checkout, I still get an error, because it tries to see what needs merging and so on:
git checkout before-efreet fatal: unable to read tree 78dd40b37ebc0cb9ccd59877b08658024416feab
This can be fixed by forcing the checkout and with having made a backup of everything just before, nothing will get lost.
git checkout -f before-efreet
|< Prev||Next >|