Web lists-archives.com

Recovering from gc errors

(I'm using git 2.15.0.)

So today "git gc" started complaining:

error: Could not read 2bc277bcb7e9cc6ef2ea677dd1c3dcd1f9af0c2b
fatal: Failed to traverse parents of commit 9c355a7726e31b3033b8e714cf7edb4f0a41d8d4
error: failed to run repack

I suspect I'm a victim of the worktree+submodule bugs -- as a longtime user of contrib/workdir/git-new-workdir, I've been playing with the "worktree" command since it was first introduced. The "git gc" error occurs when it's run in my main repo; I have not tried it in any of my worktrees/workdirs.

Various incantations of "git show ... 9c355a7726e31" only fail with the same error, so I can't determine much about the problematic commit. Luckily I'm not particularly concerned with losing objects, as I push any important progress to named refs in backup repos.

But I would like to clean this up in my local repo so that gc stops failing. I tried simply removing this and other loose commits that trip up gc (i.e. the objects/9c/355a7726e31b3033b8e714cf7edb4f0a41d8d4 file -- there are 49 such files, all of which are several months old), but now gc complains of a bad tree object:

error: Could not read c1a99c3520f0b456b8025c50302a4cc9b0b2d777
fatal: bad tree object c1a99c3520f0b456b8025c50302a4cc9b0b2d777
error: failed to run repack

This object is not lying around loose. "git fsck" lists several dangling blob/commit/tree objects, but none of them are c1a99c3520f0b4.

So I'm not sure what to do next.

Any suggestions?