如何使用 VSTS Git API for C# 获取给定提交 ID 的所有拉取请求 ID(来自合并提交)

How can I get all pull requests Ids (from merged commits) for a given commit Id using VSTS Git API for C#

如果我有一个合并到 20 个分支的提交(可以有 20 个相应的 Pull 请求),是否有 API 我可以使用原始叶提交来查找 20 个提交 ID 的列表id作为参数?

GetPullRequests(string commitId)

理想情况下会有 git rest API 方法来执行此操作,但我似乎找不到它。

谢谢!

我想通了。我们应该使用 PullRequestQuery 并将提交列表作为输入传递。它将 return 我们输入的每个提交的合并提交 ID 的字典。下面是获取一个提交 ID 的所有 PR 的代码。

  public void GetAllPullRequestsForCommit(Guid repoId, string commitId)
    {
        var query = new GitPullRequestQuery();
        var input = new GitPullRequestQueryInput() { Type = GitPullRequestQueryType.Commit, Items = new List<string>() { commitId } };

        query.QueryInputs = new List<GitPullRequestQueryInput>() { input };
        var response = _gitClient.GetPullRequestQueryAsync(query, repoId).Result;

        var samplePullRequest =  response.Results.SelectMany(x => x.Values).First().First().PullRequestId;
    }

更多信息here

我发现这个问题和答案很有用(即使我使用的是邮递员,而不是 C#)因为 the microsoft doc,为了我的钱,缺乏有用的解释或示例来说明输入/正文是什么样子的请求。

因此,除了此处的答案和文档之外,输入/结果请求正文的格式应如下所示:

{
  "queries": [
    {
      "type": "commit",
      "items": [ COMMIT_ID ]
    }
  ]
}

如果您前往 Azure DevOps > 您的存储库 > 提交 并单击作为 PR 一部分的提交,则可以验证这一点。当此页面加载时,网络选项卡显示对 PullRequestQuery 的请求,其 body/payload 格式如上。