':calls: `POST /repos/:owner/:repo/merges <http://developer.github.com/v3/repos/merging>`_
:param base: string
:param head: string
:param commit_message: string
:rtype: :class:`github.Commit.Commit`'

def merge(self, base, head, commit_message=github.GithubObject.NotSet):

    assert isinstance(base, (str, unicode)), base
    assert isinstance(head, (str, unicode)), head
    assert ((commit_message is github.GithubObject.NotSet) or isinstance(commit_message, (str, unicode))), commit_message
    post_parameters = {'base': base, 'head': head}
    if (commit_message is not github.GithubObject.NotSet):
        post_parameters['commit_message'] = commit_message
    (headers, data) = self._requester.requestJsonAndCheck('POST', (self.url + '/merges'), input=post_parameters)
    if (data is None):
        return None
    else:
        return github.Commit.Commit(self._requester, headers, data, completed=True)
