I'm running Git 1.6.4.2. Garbage collection is failing saying "error: unable to find <SHA1>
".
I've managed to determine that the missing object is a blob, and there is no way that I can get the blob file back. It seems that two scripts that run "git add" and "git commit" were running at the same time and managed to interfere with each other so that one committed a newer version of a file than the other, and the older version's blob vanished.
So I'm trying to roll back my repository to take out the commit that refers to the tree that refers to the missing blob.
I know which branch the commit was on, so I ran "git reset" on it to rewind to the parent of the duff commit. And I know that the branch was merged somewhere else, so I rewound that branch too. So as far as I know, the duff commit/tree/blob are not referenced by anything. But if I run git prune --expire=now
followed by git gc
then I still get an error about the missing object.
How can I query the Git database to find every tree object that contains the duff blob id? And how do I then find out what is causing Git prune to retain it?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…