如何通过Azure DevOps API检查Pull Request的所有变更是否已合并?
检查Azure DevOps Pull Request所有变更是否已合并到目标分支的API解决方案
Azure DevOps API确实没有直接返回浏览器界面中"所有变更已合并"的现成字段,但可以通过以下两种方式实现需求:
方法一:对比源分支与目标分支的提交差异
获取PR基础信息
调用Pull Requests - GetAPI拿到PR的状态、源分支和目标分支名称:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=7.1-preview.1重点关注
status字段(completed表示PR已合并)、sourceRefName和targetRefName。对比分支提交
如果PR已合并,调用Commits - Get CompareAPI对比源分支和目标分支的提交差异:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?baseVersion={targetRefName}&targetVersion={sourceRefName}&api-version=7.1-preview.1- 如果返回的提交列表为空,说明源分支的所有变更都已合并到目标分支
- 如果有返回提交,要么是PR合并后源分支新增了提交,要么是合并过程中存在未同步的变更
方法二:验证PR关联提交是否存在于目标分支
获取PR的所有关联提交
调用Pull Requests - Get CommitsAPI拿到PR包含的所有提交SHA:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}/commits?api-version=7.1-preview.1逐个验证提交是否在目标分支
对每个提交SHA,调用Commits - GetAPI检查该提交是否属于目标分支:GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitSha}?api-version=7.1-preview.1查看返回结果中的
parents和refNames字段,确认提交是否存在于目标分支的提交历史中。
关于冲突信息滞后的处理
Azure DevOps的PR状态存在缓存机制,若遇到冲突信息更新不及时的情况:
- 部分API支持添加
bypassCache=true参数强制刷新缓存(比如PR详情API) - 若参数不生效,建议等待3-5分钟后重新查询,避免获取到过时状态
特殊情况处理
如果PR是通过** squash merge** 或 rebase merge 方式合并的,源分支的提交SHA会与目标分支中的提交SHA不一致,此时需要对比提交的具体变更内容:
调用Commits - Get Changes API获取提交的diff内容,再与目标分支对应文件的最新版本对比,确认变更是否已同步。
内容的提问来源于stack exchange,提问作者Rico
相关产品推荐
相关产品推荐

