You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Octokit.net实现合并提交的Cherry-pick功能?

实现合并提交的Cherry-pick功能

因为Octokit.NET暂未封装GitHub的Cherry-pick API端点,你可以直接通过GitHub REST API的合并接口来实现该功能,具体方案如下:

核心思路

GitHub的POST /repos/{owner}/{repo}/merges接口支持通过指定cherry_pick: true参数完成cherry-pick操作,只需传入目标分支名(base)和要cherry-pick的提交SHA(head)即可。我们可以通过Octokit.NET的Connection对象发送自定义请求调用该接口。

代码实现

替换你代码中注释的逻辑部分,添加以下代码:

if (releaseBranch != null)
{
    // 构造Cherry-pick请求体
    var cherryPickRequest = new
    {
        @base = releaseBranch.Name,
        head = mergeCommit.Sha,
        cherry_pick = true,
        // 可选:自定义提交信息,默认沿用原提交内容
        commit_message = $"Cherry-pick merge commit {mergeCommit.Sha} from PR #{ev.PullRequest.Number}"
    };

    // 构造API请求路径
    var repoOwner = ev.Repository.Owner.Login;
    var repoName = ev.Repository.Name;
    var requestUrl = $"repos/{repoOwner}/{repoName}/merges";

    try
    {
        // 发送POST请求执行cherry-pick
        await client.Connection.PostAsync<object>(new Uri(requestUrl, UriKind.Relative), cherryPickRequest);
        // 可添加日志记录操作成功信息
    }
    catch (ApiException ex)
    {
        // 处理冲突或其他错误,例如记录日志、给PR添加评论告知失败
        // await client.Issue.Comment.Create(ev.Repository.Id, ev.PullRequest.Number, $"Cherry-pick到分支{releaseBranch.Name}失败:{ex.Message}");
    }
}

注意事项

  • 权限配置:确保你的GitHub App拥有contents: write和pull_requests: write权限,才能执行分支修改和相关操作。
  • 冲突处理:若cherry-pick时出现代码冲突,API会返回409错误,需在代码中捕获并处理(比如通知相关人员手动解决冲突)。
  • 合并提交兼容性:GitHub API支持对合并提交执行cherry-pick,会自动处理合并提交的变更内容。

内容的提问来源于stack exchange,提问作者Pieterjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:23:14