I don’t think identifying discarded commits is viable. With a force push, the commit is discarded from the ref/branch. I am not sure how Git hosting reflog and discarded objects may be accessible in general or between platforms (GitHub vs GitLab etc).
I think a simple "try to find" approach where a force-push would mean no "x commits since" can be determined is fine. A force push is a rewriting of history, so determining a commit number/scalar diff value requires a well thought out concept which I would only do as a second step, if at all.
If I force-push IMO it should display either no "commits since last build" or "could not determine commits since last build because last build commit was not found within the last 200 commits". I think given how long the second is, that may be reasonable as a log message rather than a displayed short info.
If you really wanted to determine e.g. "discarded x commits, added y commits since last build", this may work for repositories already cloned and reused on a node, as it could still refer to and log-diff to the old object. You open a whole bunch of complexity there though with handling this, and communicating to the user what the dependency or platform conditions and consequences are, and how to display this and/or discard+add adequately.
I am not that familiar with how Jenkins master tracks refs to determine diffs, so I can not really make guesses there. Maybe it would be reasonably possible with that - at least to a degree where it is viable.
I see now that this is probably not a forensics plugin issue, but git SCM instead.