You can't blame git where you clearly didn't fully understand how it works, and you clearly ignored its error messages, and used the -f option.
There's some very useful tools like "tig" to check the state before pushing.
A good rule of thumb is to never push -f before being absolutely sure of what it's going to do.
And everything is not lost, you can still use "git reflog" to retrieve the previous state.
You're whining about git where you are clearly in fault here :)