Reverting a change has been as important task in OSM as it is impossible. With geodata, there are just too many edge cases. And OSM, unlike Wikipedia, is not a set of objects which you can process independently, it is one big ball of wibbly-wobbly nodely-wayly stuff.
So I thought it might be fun to write a proper 3-way reverter myself:
https://github.com/Zverik/simple-revert/
It doesn't get too deep in algorithms, hence it can reject a changeset, but if it works, it works 100% without conflicts.
And if doing "pip install" is too much work, there is a web version of that, ready for your changeset lists:
http://revert.osmz.ru/
Of course it's limited, since I don't want to overload mine or API servers.
Kamil Monicz (NorthCrab) recently published his own take on such reverter, but the usage of Google's text processing library leads to weird unreported issues when reverting geometry modifications. So be careful:
https://wiki.openstreetmap.org/wiki/Osm-revert