I realize this is only a basic start.  But since this is public API I'd like to think about what the final API will look like a bit.

Merges can accept any SHA-1.  So technically we need to take AnyObjectId here as an input.  Having a Ref can be nicer, because we might be able to format a better message.  Further, `git pull` takes advantage of the URIish to produce an even more useful message.

Merges also can accept more than one SHA-1 if you consider the octopus strategy.  So maybe we want this part of the API to be:

  public MergeCommand include(AnyObjectId commit) {
    return include(commit, commit.abbrev());
  }

  public MergeCommand include(Ref ref) {
    return include(ref.getObjectId(), ref.getName());
  }

  public MergeCommand include(AnyObjectId commit, String name) {
    sources.add(new Source(commit, name));
    return this;
  }

  private static class Source {
    final ObjectId commit;
    final String name;
  }

Then when we format the merge message we can try to take advantage of that additional name member to describe the source of the merge.  Further, callers can include more than one commit in a single merge operation.