In some previous backups, your bad objects may have been packed in different files or may be loose objects yet. So your objects may be recovered.
It seems there are a few bad objects in your database. So you could do it the manual way.
Because of git hash-object, git mktree and git commit-tree do not write the objects because they are found in the pack, then start doing this:
mv .git/objects/pack/* <somewhere>
for i in <somewhere>/*.pack; do
git unpack-objects -r < $i
done
rm <somewhere>/*
(Your packs are moved out from the repository, and unpacked again in it; only the good objects are now in the database)
You can do:
git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee
and check the type of the object.
If the type is blob: retrieve the contents of the file from previous backups (with git show or git cat-file or git unpack-file; then you may git hash-object -w to rewrite the object in your current repository.
If the type is tree: you could use git ls-tree to recover the tree from previous backups; then git mktree to write it again in your current repository.
If the type is commit: the same with git show, git cat-file and git commit-tree.
Of course, I would backup your original working copy before starting this process.
Also, take a look at How to Recover Corrupted Blob Object.