code: public <E> MergeResult<E> merge(List<E> commonAncestor, List<E> next, List<E> current,
          MergeConfiguration<E> configuration)
      {
          MergeResult<E> result;
          try {
              result = this.diffManager.merge(commonAncestor, next, current, configuration);
          } catch (MergeException e) {
              result = new DefaultMergeResult<E>(commonAncestor, next, current);
              result.getLog().error("Failed to execute merge", e);
          }
  
          return result;
      }
docs: Execute a 3-way merge on provided versions.
  
  @param <E> the type of compared elements
  @param commonAncestor the common ancestor of the two versions of the content to compare
  @param next the next version of the content to compare
  @param current the current version of the content to compare
  @param configuration the configuration of the merge behavior
  @return the result of the merge