@Override
  public int compareHeads(int head1, int head2) {
    if (head1 == head2) {
      return 0;
    }

    Collection<VcsRef> refs1 = myRefsModel.refsToCommit(head1);
    Collection<VcsRef> refs2 = myRefsModel.refsToCommit(head2);
    boolean firstEmpty = isEmptyRefs(refs1, head1);
    boolean secondEmpty = isEmptyRefs(refs2, head2);
    if (firstEmpty && secondEmpty) {
      return 0;
    }
    if (firstEmpty) {
      return -1;
    }
    if (secondEmpty) {
      return 1;
    }

    VcsLogRefManager refManager1 = getRefManager(refs1);
    VcsLogRefManager refManager2 = getRefManager(refs2);
    if (!refManager1.equals(refManager2)) {
      return 0;
    }

    Map<VcsRef, Boolean> positions = ContainerUtil.newHashMap();
    for (VcsRef ref : refs1) {
      positions.put(ref, true);
    }
    for (VcsRef ref : refs2) {
      positions.put(ref, false);
    }

    VcsRef firstRef = refManager1.sort(positions.keySet()).get(0);
    return positions.get(firstRef) ? 1 : -1;
  }