One really common issue I encounter is that Git is purely text-based, and doesn't know anything about the language of the file it's tracking. Most of my time spent resolving merge conflicts is fixing incorrect assumptions made by Git, like it thinking that a change to a function's signature was also tied to the variables above, or that adding a function is somehow replacing a completely different one because a single word is the same.
Is there any way to substitute Git's diff-checker for one that actually understands the semantics of the language it's looking at?