One thing I noticed is that annotations will be duplicated if you do a pull to get the annotations, edit them, and do a push.
The QuPath OMERO extension implements the option to delete existing annotations (for the specific user), both on pull and on push.
It does not do/use a diff or anything like that.