Azure DevOps Services REST API中git branch --contains的等效实现查询
Azure DevOps REST API识别stage分支合并提交的替代方案
Azure DevOps REST API没有直接对应git branch --contains <commit>的功能,但可以通过以下两种方法实现等效效果,进而识别来自stage分支的合并提交:
方法1:精准搜索提交是否存在于stage分支历史
调用提交搜索API,直接验证目标父提交是否属于stage分支:
- 请求地址:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits?api-version=7.1-preview.1 - 关键参数:
searchCriteria.itemVersion.version: 设为stage分支的完整引用,比如refs/heads/stagesearchCriteria.commitId: 要检查的父提交IDsearchCriteria.top: 1(只需要判断是否存在,无需返回全部结果)
- 判定逻辑:如果API返回非空的提交列表,说明该父提交存在于stage分支的历史中。
方法2:通过提交比较判断归属关系
这种方法更高效,适合批量验证:
- 先获取stage分支的最新提交ID:
- 请求地址:
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/refs?filter=heads/stage&api-version=7.1-preview.1 - 从返回结果中提取
objectId字段,即stage分支的最新提交ID。
- 请求地址:
- 调用提交比较API,验证父提交与stage分支的关系:
- 请求地址:
POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/compare?api-version=7.1-preview.1 - 请求体示例:
{ "baseCommitId": "<stage分支最新提交ID>", "targetCommitId": "<待检查的父提交ID>" } - 判定逻辑:如果返回结果中
aheadCount为0,说明待检查的父提交是stage分支的祖先(即存在于stage分支历史中)。
- 请求地址:
针对合并提交识别的优化流程
结合你的需求,可按以下步骤操作:
- 获取迭代对应的所有提交记录。
- 从这些提交中筛选出包含多个父提交的记录(合并提交的特征)。
- 对每个候选合并提交的父提交,用上述任一方法验证是否存在于stage分支。
- 只要有一个父提交属于stage分支,即可判定该提交是来自stage的合并提交。
内容的提问来源于stack exchange,提问作者Oscar Fonseca
相关产品推荐
相关产品推荐

