如何通过GitLab API获取master分支的原生提交?
获取GitLab master分支原生提交的解决方案
问题描述
我目前使用以下GitLab API获取master分支的所有提交:
https://gitlab.com/api/v4/projects/${projectID}/repository/commits?ref=master&per_page=50&page=1
请求能正常返回结果,但包含了并非起源于master分支、后续合并进来的提交。在GitLab的图形视图中,红色节点是master分支的原生提交,绿色节点是其他分支合并过来的,我只需要红色节点对应的提交。
尝试过添加?ref=master过滤,但仍会显示合并分支的父提交(这是预期行为),现寻求以下任一解决方案:
- 通过GitLab API直接获取符合要求的提交列表
- 通过GitLab API对
repository/commits请求结果过滤,仅保留起源于master分支的提交
解决方案1:直接调用API时指定筛选参数
GitLab API的repository/commits接口支持first_parent参数,将其设为true后,API会只返回当前分支的第一父提交链中的内容,也就是你需要的master分支原生提交(排除合并自其他分支的提交)。
修改后的请求地址:
https://gitlab.com/api/v4/projects/${projectID}/repository/commits?ref=master&per_page=50&page=1&first_parent=true
这个参数会让API严格沿着master分支的第一父节点返回提交,完全匹配你要的红色节点提交。
解决方案2:对返回结果进行二次过滤
如果你的GitLab版本不支持first_parent参数,可以通过二次过滤实现:
- 先调用原API获取master分支的所有提交列表:
https://gitlab.com/api/v4/projects/${projectID}/repository/commits?ref=master&per_page=50&page=1
- 对每个提交,调用
https://gitlab.com/api/v4/projects/${projectID}/repository/commits/${commitId}/refs接口,检查返回结果中是否包含refs/heads/master且类型为branch的记录。 - 仅保留满足上述条件的提交,这些就是master分支的原生提交。
注意:这种方式需要多次调用API,效率较低,优先推荐第一种方案。
内容的提问来源于stack exchange,提问作者David Arppe
相关产品推荐
相关产品推荐

