如何通过GitHub API获取分支拆分的初始Commit SHA?
如何通过GitHub API获取分支拆分的初始Commit SHA
- 可以通过GitHub API的Compare two commits接口实现类似
git merge-base的功能,找到分支与主分支的最近共同祖先提交(即你图中标记为1的提交)。 - 具体操作:
- 调用接口时,传入仓库信息、主分支(如
main/master)和目标分支的引用,接口路径为GET /repos/{owner}/{repo}/compare/{base}...{head}。 - 返回结果里的
merge_base_commit字段就是两个分支的共同祖先,其sha属性即为你需要的初始提交SHA。
- 调用接口时,传入仓库信息、主分支(如
- 若不确定目标分支从哪个主分支拆分,可先调用
GET /repos/{owner}/{repo}接口获取仓库的默认分支(default_branch字段),再用它作为base参数进行比较。 - 在GitHub CI的JavaScript Action中,可借助
@actions/github包调用API,示例代码如下:
const github = require('@actions/github'); const octokit = github.getOctokit(process.env.GITHUB_TOKEN); async function getMergeBaseSha() { const repoInfo = github.context.repo; const targetBranch = github.context.ref.replace('refs/heads/', ''); // 获取仓库默认分支 const { data: repoData } = await octokit.rest.repos.get({ owner: repoInfo.owner, repo: repoInfo.repo }); const defaultBranch = repoData.default_branch; // 比较分支获取共同祖先 const { data: compareData } = await octokit.rest.repos.compareCommits({ owner: repoInfo.owner, repo: repoInfo.repo, base: defaultBranch, head: targetBranch }); return compareData.merge_base_commit.sha; } // 执行并输出结果 getMergeBaseSha().then(sha => { console.log('分支拆分的初始Commit SHA:', sha); });
内容的提问来源于stack exchange,提问作者Koen
相关产品推荐
相关产品推荐

