GitHub合并被阻:提交已签名仍提示需签名?
以下是几种常见的原因及对应的排查方向:
PR中存在未签名的历史提交:分支保护规则要求所有提交都必须签名,哪怕最新的提交显示"Verified",只要PR里包含任何一个未签名的旧提交,就会触发拦截。你可以用
git log --show-signature命令遍历PR的所有提交,检查每个提交的签名状态。找到未签名的提交后,通过变基操作重新为这些提交添加签名。签名密钥未在GitHub完成验证:本地提交显示签名成功,但如果用来签名的GPG或SSH密钥没有在你的GitHub账号设置中完成验证,GitHub系统不会认可这个签名的有效性。去账号的"SSH and GPG keys"设置页面,确认对应的密钥状态是"Verified"。
分支保护规则检查存在缓存延迟:有时候GitHub的分支保护检查会有缓存,刚完成签名或密钥验证后,系统可能还没同步状态。可以尝试关闭PR再重新打开,或者推送一个空提交
git commit --allow-empty -m "Trigger recheck",触发系统重新扫描所有提交的签名状态。签名使用的邮箱未在GitHub验证:提交签名时使用的邮箱必须是你GitHub账号中已验证的邮箱。如果
git config user.email设置的邮箱没在账号里绑定或验证,哪怕签名成功,GitHub也不会将其标记为有效签名。检查本地Git邮箱配置,确保和GitHub账号的验证邮箱一致。合并提交未签名:如果PR中包含了自动生成的合并提交(比如使用
git merge而非变基的方式合并分支),这个合并提交可能没有被签名。需要确保所有合并到PR的提交(包括合并提交)都经过签名,Git 2.13及以上版本支持在合并时添加--gpg-sign参数来直接签名合并提交。
内容的提问来源于stack exchange,提问作者himmip

