code: func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error) {
  	if commit == nil {
  		return nil, nil, fmt.Errorf("commit must be provided")
  	}
  
  	u := fmt.Sprintf("repos/%v/%v/git/commits", owner, repo)
  
  	parents := make([]string, len(commit.Parents))
  	for i, parent := range commit.Parents {
  		parents[i] = *parent.SHA
  	}
  
  	body := &createCommit{
  		Author:    commit.Author,
  		Committer: commit.Committer,
  		Message:   commit.Message,
  		Parents:   parents,
  	}
  	if commit.Tree != nil {
  		body.Tree = commit.Tree.SHA
  	}
  	if commit.Verification != nil {
  		body.Signature = commit.Verification.Signature
  	}
  
  	req, err := s.client.NewRequest("POST", u, body)
  	if err != nil {
  		return nil, nil, err
  	}
  
  	c := new(Commit)
  	resp, err := s.client.Do(ctx, req, c)
  	if err != nil {
  		return nil, resp, err
  	}
  
  	return c, resp, nil
  }
docs: // CreateCommit creates a new commit in a repository.
  // commit must not be nil.
  //
  // The commit.Committer is optional and will be filled with the commit.Author
  // data if omitted. If the commit.Author is omitted, it will be filled in with
  // the authenticated user’s information and the current date.
  //
  // GitHub API docs: https://developer.github.com/v3/git/commits/#create-a-commit