如何通过GitHub API V3将一个仓库强制推送到另一个仓库?
用GitHub API完全替换Repo2为Repo1的内容与提交历史
核心方案
直接将Repo1目标分支的提交哈希强制设置到Repo2的对应分支上,这是最高效的实现方式——无需重新生成文件、提交或树结构,GitHub会自动处理跨仓库的对象同步。
具体步骤
1. 获取Repo1目标分支的提交哈希
调用分支信息接口,拿到Repo1目标分支(比如main)当前指向的提交SHA:
GET /repos/{owner1}/{repo1}/branches/{branch}
从返回结果中提取commit.sha字段的值。
2. 强制更新Repo2的分支引用
调用更新引用接口,添加force=true参数实现强制覆盖:
PATCH /repos/{owner2}/{repo2}/git/refs/heads/{branch}
请求体结构如下:
{ "sha": "步骤1获取的Repo1提交SHA", "force": true }
执行后,Repo2的目标分支会直接指向Repo1的那个提交,完全覆盖原有内容、提交历史,和Repo1状态完全一致。
3. 同步多分支(可选)
如果需要同步Repo1的多个分支,对每个分支重复上述两步即可。
方案优势
- 无需遍历文件、创建Blobs/Tree,减少API调用量,效率更高
- 完整保留Repo1的提交历史,不会生成新的提交记录
- 利用GitHub内部机制处理对象同步,避免手动复制内容的繁琐
注意事项
- 确保授权Token拥有两个仓库的写入权限
- 操作前确认Repo2原有内容无保留价值,强制更新后无备份无法恢复
内容的提问来源于stack exchange,提问作者Jacob Wartofsky
相关产品推荐
相关产品推荐

