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

如何通过PyGithub/GitHub API撤销/删除分支最后一次提交?

解决方案

要远程撤销fork分支的提交,本质是强制将分支的引用指针移动到更早的历史提交(等价于本地执行git reset --hard <目标SHA>后git push --force)。以下是具体实现方式:

方法一:使用PyGithub库

你的尝试3方向正确,但需要将分支引用指向要回退到的目标提交SHA,而非当前分支的HEAD SHA,同时必须开启强制更新:

from github import Github

# 初始化GitHub连接
git = Github(login_or_token="你的GitHub访问令牌")
# 获取你的fork仓库实例
repo = git.get_user().get_repo("你的fork仓库名称")
# 目标分支名称
branch_name = "需要修改的分支名"

# 获取分支的Git引用(格式为heads/分支名)
ref = repo.get_git_ref(f"heads/{branch_name}")

# 确定要回退到的目标commit SHA
# 示例:撤销最后一次提交,取当前HEAD的父提交SHA
target_sha = repo.get_branch(branch_name).commit.parents[0].sha
# 若已知具体历史提交SHA,直接赋值即可:target_sha = "abc123..."

# 强制更新分支引用到目标SHA(force=True对应git push --force)
ref.edit(sha=target_sha, force=True)

方法二:直接调用GitHub REST API

如果PyGithub无法满足需求,可直接通过HTTP请求调用API:

import requests

# 配置参数
token = "你的GitHub访问令牌"
owner = "你的GitHub用户名"
repo_name = "你的fork仓库名称"
branch_name = "需要修改的分支名"
target_sha = "要回退到的目标commit SHA"

# 构造API请求地址
api_url = f"https://api.github.com/repos/{owner}/{repo_name}/git/refs/heads/{branch_name}"

# 请求头
headers = {
    "Authorization": f"token {token}",
    "Accept": "application/vnd.github.v3+json"
}

# 请求体:指定目标SHA并开启强制更新
payload = {
    "sha": target_sha,
    "force": True
}

# 发送PATCH请求更新引用
response = requests.patch(api_url, json=payload)
response.raise_for_status()  # 抛出异常若请求失败

关键注意事项

  • 访问令牌需具备repo(私有仓库)或public_repo(公有仓库)权限。
  • force=True是必须的,因为重写分支历史属于非常规操作,对应本地的强制推送。
  • 操作后,PR会自动同步更新(因为PR基于分支状态)。
  • 不要在多人协作的分支上执行此操作,会导致其他协作者的本地分支与远程冲突。
  • 被撤销的提交会成为"孤儿提交",GitHub会在一段时间后自动清理(除非有其他引用指向它们)。

内容的提问来源于stack exchange,提问作者TheAlchemyst.1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:21