':calls: `POST /repos/:owner/:repo/git/commits <http://developer.github.com/v3/git/commits>`_
:param message: string
:param tree: :class:`github.GitTree.GitTree`
:param parents: list of :class:`github.GitCommit.GitCommit`
:param author: :class:`github.InputGitAuthor.InputGitAuthor`
:param committer: :class:`github.InputGitAuthor.InputGitAuthor`
:rtype: :class:`github.GitCommit.GitCommit`'

def create_git_commit(self, message, tree, parents, author=github.GithubObject.NotSet, committer=github.GithubObject.NotSet):

    assert isinstance(message, (str, unicode)), message
    assert isinstance(tree, github.GitTree.GitTree), tree
    assert all((isinstance(element, github.GitCommit.GitCommit) for element in parents)), parents
    assert ((author is github.GithubObject.NotSet) or isinstance(author, github.InputGitAuthor)), author
    assert ((committer is github.GithubObject.NotSet) or isinstance(committer, github.InputGitAuthor)), committer
    post_parameters = {'message': message, 'tree': tree._identity, 'parents': [element._identity for element in parents]}
    if (author is not github.GithubObject.NotSet):
        post_parameters['author'] = author._identity
    if (committer is not github.GithubObject.NotSet):
        post_parameters['committer'] = committer._identity
    (headers, data) = self._requester.requestJsonAndCheck('POST', (self.url + '/git/commits'), input=post_parameters)
    return github.GitCommit.GitCommit(self._requester, headers, data, completed=True)
