英文:
Failing to create a commit using go-github with 422 - Update is not a fast forward
问题
我正在使用以下函数来使用go-github
库在分支中简单地创建一个新的提交:
func GHAPICreateCommit(ctx context.Context, client *github.Client, commitOpts *CommitOptions) error {
// 获取分支的引用
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)
// 使用更新后的提交消息创建一个新的提交
newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)
if err != nil {
return err
}
// 将新的提交附加到引用上
ref.Object.SHA = newCommit.SHA
// 更新分支引用以指向新的提交
_, _, err = client.Git.UpdateRef(ctx, repoOwner, commitOpts.Repo, ref, false)
if err != nil {
return err
}
return nil
}
这个操作失败了:
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 []
为什么不是快进(fast-forward)呢?它只是从现有的分支/提交创建了一个新的提交。
PS:我明确地不想在我的提交中创建新文件。
英文:
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.
答案1
得分: 2
func (s *GitService) CreateCommit(ctx context.Context, owner string, repo string, commit *Commit) (*Commit, *Response, error)
参数commit
用于指定新提交的一些信息,包括新提交的parents
(参见实现)。
在你的代码中,新提交和旧提交具有相同的parents
,因此这不是一个快进推送到分支。为了使其成为分支的快进推送,新提交的parents
应该指向旧提交。
我猜以下更改将使其成为快进:
+ commit.Parents = []*github.Commit{commit}
newCommit, _, err := client.Git.CreateCommit(ctx, repoOwner, commitOpts.Repo, commit)
英文:
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论