The problem you are having is that your developers are recharging from the main branch, and then forcing their own branches. What git rebase really does is that it git rebase all the changes you made, merge the main branch, then reapply your commits (as if they were patch files). This will create a completely new git commit with a completely new hash.
In short, the old commit was lost and a new identical commit was created.
That is why it is highly discouraged to cancel any public work, because you are effectively changing the story. Any people who are forked from your work will have a very bad day if their work is based on changes that are no longer available.
edit: the commit is not lost on its own, it still exists in your repo. However, it is no longer available on the corresponding branch.
source share