I hate having to create a new type like this just for a place to put `BaseTree` :confused:

So this might be a crazy idea... what if `CreateTree` were a non-exported type, and the `CreateTree` func took a slice of regular `Tree` objects as well as a baseTree string?  So you'd have something like:

```go
type createTree struct {
  baseTree string    `json:base_tree`
  trees    []GitTree `json:tree`
}

func (s *GitService) CreateTree(owner string, repo string, []Tree trees, baseTree string) (*Tree, error) {
  create := &createTree{
    baseTree: baseTree,
    trees: trees,
  }
  ...
}
```

I may have some syntax errors above, but do you get what I mean?  In fact, this pattern may be generally useful in a few other places as well.  I'm not sure what GitHub will do if you pass an empty string for base_tree, so you'll probably want to add `omitempty`.