Reputation: 19382
I am using the following function to simply create a new commit in a branch using go-github
library
func GHAPICreateCommit(ctx context.Context, client *github.Client, commitOpts *CommitOptions) error {
// Get the reference of the branch
ref, _, err := client.Git.GetRef(ctx, repoOwner, commitOpts.Repo, "refs/heads/"+commitOpts.Branch)
if err != nil {
return err
}
commit, _, err := client.Git.GetCommit(ctx, repoOwner, commitOpts.Repo, *ref.Object.SHA)
if err != nil {
return err
}
commit.Message = github.String(commitOpts.CommitMessage)
// Create a new commit with the updated commit message
newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)
if err != nil {
return err
}
// Attach the new commit to the reference
ref.Object.SHA = newCommit.SHA
// Update the branch reference to point to the new commit
_, _, err = client.Git.UpdateRef(ctx, repoOwner, commitOpts.Repo, ref, false)
if err != nil {
return err
}
return nil
}
This fails with:
PATCH https://api.github.com/repos/MyOrg/myrepo/git/refs/heads/the-branch-I-am-creating-the-new-commit-to: 422 Update is not a fast forward []
Why isn't a fast-forward? It is simply a new commit created from an existing branch/commit.
PS: I EXPLICITLY DO NOT want to create new files on my commit.
Upvotes: 3
Views: 267
Reputation: 7475
func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error)
The parameter commit
is used to specify some of the information of the new commit, including the parents
of the new commit (see the implementation).
In your code, the new commit and the old commit has the same parents
, so this is not a fast-forward push to the branch. To make it a fast-forward push to the branch, the parents
of the new commit should point to the old commit.
I guess the following change would make it a fast-forward:
+ commit.Parents = []*github.Commit{commit}
newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)
Upvotes: 2