Вроде, этого должно быть достаточно:
git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch *.o' --prune-empty --tag-name-filter cat -- --all
git reflog expire --expire=now --all
git gc --prune=now
git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch *.o' --prune-empty --tag-name-filter cat -- --all
git filter-branch -f --index-filter 'git rm -rf --cached --ignore-unmatch *.o' --prune-empty --tag-name-filter cat -- --all
git reflog expire --expire=now --all
git gc --prune=now
# кол-во объектов стало меньше
git reflog expire --expire=now --all
git gc --prune=now
# кол-во объектов стало ещё меньше