Я согласен, что было бы замечательно, если бы такой инструмент существовал, но я не знаю ни одного. Я считаю, что их нет, потому что алгоритм слияния для каждого SCM (будь то git, hg, bzr, svn и т. Д.) Работает с наименьшим общим знаменателем, который представляет собой простой текст. Чтобы эти инструменты SCM действительно понимали синтаксис и семантику языка, они должны включать возможность синтаксического анализа языка. Кажется, что это просто слишком большая задача для любого SCM, чтобы включить возможность разбора Java, C #, Python, Ruby, Groovy, C, C ++ и т. Д., Не говоря уже о том, что каждый из этих языков имеет разные синтаксисы между версиями (например, дженерики Java не существовали до 1.5). Таким образом, SCM должен будет включать возможность обнаружения или настройки, чтобы знать, на каком языке и версии языка написан исходный код.
Я думаю, что более вероятно, что любая функция слияния, зависящая от языка, будет найдена в стороннем инструменте слияния (например, настройка инструмента слияния> в .gitconfig и настройка слияния пользовательского интерфейса> в .hgrc). Этот инструмент можно настроить так, чтобы он знал, что любые файлы .java в вашем проекте написаны на Java 1.6, а затем использует функции синтаксического анализа в JDK для генерации AST и выполнения некоторого «глубокого» анализа того, является ли изменение было значимым в контексте этого языка.