codecamp

GitHub 关于必需状态检查

必需状态检查确保在协作者可以对受保护分支进行更改前,所有必需的 CI 测试都已通过。

受保护分支适用于具有 GitHub Free 和组织的 GitHub Free 的公共仓库,以及具有 GitHub Pro、GitHub Team、GitHub Enterprise Cloud 和 GitHub Enterprise Server 的公共和私有仓库。 更多信息请参阅“GitHub 的产品”。

关于必需状态检查

如果您在仓库中实施了分支保护,便可设置必需状态检查。 更多信息请参阅“配置受保护分支”和“启用必需状态检查”。必须状态检查可以是检查或状态。 更多信息请参阅“关于状态检查”。

在启用必需状态检查后,必须通过所有必需状态检查后,分支才可合并到受保护分支。 所有必需状态检查通过后,必须将任何提交推送到另一个分支,然后合并或直接推送到受保护分支。

合并受保护分支

注:对仓库具有写入权限的任何个人或集成可以在仓库中设置任何状态检查的状态。 GitHub 无法验证检查的作者是否被授权创建具有特定名称的检查或修改现有状态。 在合并拉取请求之前,应验证合并框中列出的每个状态的作者是否符合预期。

即使必需状态检查失败或待处理,仓库管理员也可以合并受保护分支。 您可以要求管理员遵循必需状态检查。 更多信息请参阅“启用必需状态检查”。

管理员合并受保护分支

即使受保护分支过期,管理员也可使用基本分支合并该分支。

必需状态检查设置

根据您是否希望在合并前使用基本分支更新您的分支,您可以设置宽松或严格的状态检查。 更多信息请参阅“必需状态检查的类型”。

必需状态检查故障排除

如果您有名称相同的检查和状态,并且选择该名称作为必需状态检查,则检查和状态都是必需的。 更多信息请参阅“检查”。

在设置必需状态检查后,您的分支在合并之前必须使用基本分支更新。 这可确保您的分支已经使用基本分支的最新代码做过测试。 如果您的分支过期,则需要将基本分支合并到您的分支。

注:您也可以使用 Git 变基以基础分支更新您的分支。 更多信息请参阅“关于 Git 变基”。

过期分支

在通过所有必需状态检查之前,无法向受保护分支推送本地更改。 反而会收到类似如下的错误消息:

remote: error: GH006: Protected branch update failed for refs/heads/master.
remote: error: Required status check "ci-build" is failing

注:最新且通过必需状态检查的拉取请求可以本地合并,并且推送到受保护分支。 此操作无需对合并提交本身运行状态检查。

有时,测试合并提交与头部提交的状态检查结果存在冲突。 如果测试合并提交具有状态,则必须传递该状态。 否则,必须传递头部提交的状态后才可合并该分支。 有关合并提交的更多信息,请参阅“拉取请求”。

具有冲突的合并提交的分支

延伸阅读

GitHub 配置受保护分支
GitHub 必需状态检查的类型
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }