We have 2 branches: master and free. Most of the code is written in master and merged into free (not the other way). Now, at some point something went wrong: code that should only be in branch free now appears in master. It seems like somebody merged free into master (or re-based free on top of master) and pushes this. This is silly, but we can’t identify when this happened and which commit (commits) introduces this bug.
I would appreciate any advice on how to recover from this situation.
Finally I recovered the master branch by the following simple steps.
Probably the most important part is the realization that rebase is not so destructive after all. It destroys the history, but not the tree. So, there is always a commit that you can revert to.