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

如何使用GitHub Rest API配合curl实现类似git rev-list的功能

实现方法

完全可以通过GitHub REST API的/repos/{owner}/{repo}/commits端点结合curl实现git rev-list的核心效果,以下是具体用法:

1. 基础等价:git rev-list <分支名>(列出指定分支所有提交哈希,倒序排列)

你可以直接调用该端点,配合分页拉取所有提交的sha值即可,完整脚本示例适配你已有的使用习惯:

# 先配置你的参数
api_user="你的GitHub用户名"
api_token="你的GitHub个人访问令牌"
owner="仓库所有者名"
repo="仓库名"
api_branch="要查询的分支名"
api_url="https://api.github.com/repos/${owner}/${repo}"

# 先获取总页数,per_page最大可设为100减少请求次数
total_page=$(curl -I -k -u ${api_user}:${api_token} "${api_url}/commits?sha=${api_branch}&per_page=100" | sed -n '/^[Ll]ink:/ s/.*"next".*page=\([0-9]*\).*"last".*/\1/p')
# 如果没有next页说明只有1页
total_page=${total_page:-1}

# 遍历所有页提取提交哈希,输出结果和git rev-list ${api_branch}完全一致
for page in $(seq 1 $total_page); do
  curl -s -k -u ${api_user}:${api_token} "${api_url}/commits?sha=${api_branch}&per_page=100&page=${page}" | jq -r '.[].sha'
done

脚本中用到的jq是通用JSON处理工具,Linux/macOS可直接通过系统包管理器安装。

2. 匹配git rev-list常用过滤参数的配置

你可以通过调整请求参数实现git rev-list的常用过滤效果:

  • 等价于git rev-list --since="2024-01-01":在请求URL后追加&since=2024-01-01T00:00:00Z,时间需符合ISO 8601格式
  • 等价于git rev-list --until="2024-01-31":在请求URL后追加&until=2024-01-31T23:59:59Z
  • 等价于git rev-list --author="用户名":在请求URL后追加&author=用户名,支持匹配用户名或邮箱前缀
  • 等价于git rev-list --abbrev-commit(输出短哈希):把jq提取逻辑改为.[].sha[:7]即可获取7位短哈希
  • 等价于git rev-list --count <分支名>:统计所有分页返回的提交数组长度相加即可,单页长度可通过jq length直接获取

3. 区间提交查询说明

如果要实现git rev-list <commit1>..<commit2>的区间查询效果,把sha参数设置为较新的commit2,拉取全量提交链后过滤掉commit1之前的记录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:24:03