Here's an odd parallel: Patch files effectively leave you with the state of the file before and the state of the file afterwards. This is just what git does at the tree level, and though it's often rightfully blamed for its weak handling of renames, guessing at renames is certainly better than not trying to handle them at all. Yet in the world of patches, we don't expect anyone to annotate their patches with which variables have been renamed (what you typically do with files in most VCSes) while simultaneously accepting that tools can't handle them at all.
This makes me think I'm just ignorant of what cleverer people use. Am I just using the wrong tool? What should I be using instead?