You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GitHub REST/GraphQL API按最后提交日期排序仓库分支

解决方案:用GitHub GraphQL API高效筛选分支

针对你遇到的GitHub REST API无法按最后更新时间排序分支的问题,推荐改用GitHub GraphQL API来实现高效分支筛选,完全无需网页抓取,且能保证脚本稳定性。

核心思路

  1. 通过GraphQL API批量获取所有分支的最后提交日期
  2. 在本地对分支按最后提交日期降序排序
  3. 遍历排序后的分支,仅对最后提交日期晚于目标日期的分支,调用API获取指定日期范围内的提交
  4. 一旦遇到分支的最后提交日期早于目标日期,直接终止遍历——因为后续分支更旧,不可能包含目标日期的提交

具体实现步骤

1. 编写GraphQL查询获取分支及最后提交日期

GraphQL允许你一次请求获取分支名称和对应的最后提交时间,示例查询如下(支持分页):

query GetBranchesWithLastCommit($owner: String!, $repo: String!, $perPage: Int!, $after: String) {
  repository(owner: $owner, name: $repo) {
    refs(refPrefix: "refs/heads/", last: $perPage, after: $after) {
      nodes {
        name
        target {
          ... on Commit {
            committedDate
          }
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
    }
  }
}
  • 替换$owner、$repo为你的仓库信息,$perPage设为最大值100(GitHub GraphQL单次最多返回100条分支)
  • 通过pageInfo中的hasNextPage和endCursor循环请求,直到获取所有分支

2. 本地排序与过滤

拿到所有分支的最后提交日期后:

  • 将分支按committedDate降序排序
  • 过滤掉committedDate早于目标日期的分支(这些分支不可能有目标日期的提交,直接跳过)

3. 获取目标日期的提交

对筛选后的分支,可继续用GraphQL查询提交,或使用你熟悉的REST API:

  • REST API示例:GET /repos/{owner}/{repo}/commits?sha={branch-name}&since={target-date}&until={target-date}
  • 也可扩展GraphQL查询,直接获取分支内指定日期的提交,减少API请求次数

优势

  • 完全基于官方API,稳定性远高于网页抓取,适合每日运行的脚本
  • 仅需处理活跃分支(约10%),大幅减少API请求量,提升效率
  • 本地排序后可提前终止遍历,避免无意义的请求

内容的提问来源于stack exchange,提问作者Spence Lowery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:42:27