Source code diff and merge based on language parsing, designed to deal with code that has been moved and modified. All team members can freely refactor and rearrange their code because they know they’ll be able to merge it easily with SemanticMerge. It doesn’t matter if one team member refactored an entire file, while another fixed a critical bug; you’ll understand what happened when you merge with SemanticMerge!
Avoids incorrectly identified automatic merges
SemanticMerge can detect when a method* was modified in parallel, even when no “text-block-conflicts” occur; thus enabling you to review the changes. Traditional merge tools would have identified the change as a trivial 'automatic' merge.
Merges are based on structure, not location
Unlike a text-based merge, SemanticMerge parses the code and extracts the structure; therefore, position changes will no longer be an issue.
SemanticMerge deals with language-specific conflicts
Add two different “usings” clauses (C#) on two different locations
Add the same method twice in two different locations
These two scenarios, among others, will be automatically resolved.
Keeps it simple
SemanticMerge handles structure conflicts, but will use a text-based merge to handle conflicts inside the bodies of methods, functions, properties, etc...
What it does?
As programmers we always expected merge to be this way: first parse the code, then get the structure and finally merge based on that. his way a case like the one below, a nightmare for text- based merge tools, involving methods moved to different classes and modified, becomes trivial.
Location independent method* merge
The first “mind blowing” feature in SemanticMerge allows you to move your methods around, refactor, and cleanup the code, and SemanticMerge will still be able to resolve the merge because it merges on a method-by-method basis.
In the scenario below, a traditional text-based merge tool will have trouble trying to match “src” and “dst”, matching “method1()” with “method2()”, since “method2()” was moved up on “src”.
SemanticMerge doesn’t really care where “method1()” is, it just knows that it has been modified by two contributors and will place the result in the correct place.