如何在Azure DevOps中通过commit hash获取合并到master的Pull request ID
可行实现方案
方案1:基于Git托管平台API调用(适合流水线内置实现)
不同主流平台的调用逻辑如下:
- GitHub:调用REST API的
/search/issues接口,请求参数设置q=<commit_hash>+type:pr+is:merged+repo:<你的仓库命名空间/仓库名>,返回结果中直接获取PR编号;如果用GitHub Actions流水线,可直接使用内置变量${{ github.event.pull_request.number }},或者通过gh命令行工具执行gh pr list --search <commit_hash> --state merged --base master直接输出PR ID - GitLab:调用REST API的
/projects/<项目ID>/repository/commits/<commit_hash>/merge_requests接口,过滤target_branch为master且state为merged的结果即可拿到PR(GitLab中称Merge Request)ID;如果是GitLab CI流水线,可直接用预定义变量CI_MERGE_REQUEST_IID - Gitee:调用REST API的
/repos/<所有者>/<仓库名>/commits/<commit_hash>/pulls接口,过滤base为master且state为merged的结果获取PR ID
方案2:基于本地Git命令查询(适合流水线有代码仓库克隆权限的场景)
如果你的流水线在执行阶段已经克隆了完整的仓库代码,可直接执行以下命令查询:
git log --merges --grep="<commit_hash>" --oneline master
输出结果中会包含合并PR的提交记录,标准的PR合并提交信息格式为Merge pull request #<PR_ID> from <分支名>,直接提取#后面的数字即可得到PR ID。
注意:该方案仅适用于仓库开启了PR合并生成合并提交的配置,如果使用Squash合并或Rebase合并策略,需要用方案1的API方式查询
后续操作说明
拿到PR ID后,可继续调用对应平台的API拉取PR关联的所有提交记录、变更文件列表,也可以通过Git命令git log <PR源分支>...master获取提交信息,git diff <PR源分支>...master获取变更文件。
内容的提问来源于stack exchange,提问作者Spartan87
相关产品推荐
相关产品推荐

