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

如何通过GitHub API创建空提交以初始化main分支?

如何通过GitHub API创建不含文件的空提交(模拟git commit --allow-empty)

可以通过GitHub API的Git数据操作端点实现,无需创建虚拟文件,核心是利用Git的标准空树SHA生成空提交,再将分支指向该提交。具体步骤如下:

1. 确保仓库已创建

先通过POST /user/repos(或组织仓库的对应端点)创建目标仓库,这一步你已经能完成,不再赘述。

2. 创建空提交对象

调用GitHub API的POST /repos/{owner}/{repo}/git/commits端点,提交参数中使用Git标准空树的SHA(4b825dc642cb6eb9a060e54bf8d69288fbee4904),并设置提交消息,同时留空父提交数组(因为是初始提交)。

示例curl请求:

curl -X POST \
  -H "Authorization: token YOUR_GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/OWNER/REPO/git/commits \
  -d '{
    "message": "Initial empty commit",
    "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
    "parents": []
  }'

请求成功后会返回该空提交的SHA值,保存这个值用于下一步。

3. 将main分支指向空提交

如果main分支尚未创建,使用POST /repos/{owner}/{repo}/git/refs端点创建分支并关联空提交:

curl -X POST \
  -H "Authorization: token YOUR_GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/OWNER/REPO/git/refs \
  -d '{
    "ref": "refs/heads/main",
    "sha": "步骤2返回的提交SHA"
  }'

如果main分支已存在但为空,使用PATCH /repos/{owner}/{repo}/git/refs/heads/main端点强制更新分支指向:

curl -X PATCH \
  -H "Authorization: token YOUR_GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/OWNER/REPO/git/refs/heads/main \
  -d '{
    "sha": "步骤2返回的提交SHA",
    "force": true
  }'

原理说明

这个流程完全模拟了本地git commit --allow-empty的逻辑:空提交本质是指向Git标准空树的无父提交,通过API直接构造这种提交对象并绑定到分支,就能得到一个不含任何文件的初始化main分支,无需依赖虚拟文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:39:28