首页/开发/Git 与协作速查/验证提交签名
协作与代码评审75 条

验证提交签名

本地用 git log --show-signature 或 git verify-commit 检查签名有效性;平台上的 Verified 徽标表示签名密钥已在账号中登记。

Git 与协作速查开发更新于 2026-10-13

签名验证回答什么

验证签名回答的是「这条提交是不是某个账号用它登记的密钥签的」。本地可以用日志命令或专门的验证命令检查,平台上则显示验证徽标,点开能看到密钥信息。需要强调的是:验证通过只说明来源与账号对应,不代表代码经过评审,也不代表它安全。

基本信息

本地查看日志命令显示签名状态,或对指定提交单独验证
平台展示验证通过或未验证的标签,点开可见密钥信息
信任模型验证密钥属于该账号,不等于代码正确
输出字母有效、损坏、不可信、无签名分别用不同字母表示

典型使用场景

  • 发布之前确认标签与提交的签名状态
  • 排查为什么平台上显示未验证
  • 批量筛查一批提交中哪些没有签名
  • 合规场景中要求关键分支的提交可验证
  • 迁移签名方式后确认历史提交仍然可验证

常用示例

常用示例
git log --show-signature -3              # 查看最近提交的签名详情
git verify-commit HEAD                    # 验证指定提交
git log --format='%h %G? %s' -10          # 用字母汇总签名状态

状态字母读法

状态含义处理方向
有效签名正确并且可信无需处理
损坏签名无法校验检查提交是否被改写
不可信密钥未进入本地信任来源先导入公钥或声明信任
无签名该提交没有签名按团队要求决定是否补签
不可信状态常见于密钥未加入本地信任来源;企业内可以约定信任来源之后再做批量校验。
平台上的验证徽标只证明签名与账号对应,不能替代评审、测试与人工判断。

排查步骤

  • 先确认自己看的是哪条提交,历史重写之后哈希会变化
  • 本地验证之前先导入对方公钥或配置允许签名者清单
  • 平台显示未验证时,核对账号里登记的密钥是否匹配
  • 批量筛查时用格式化的日志输出,一次性看完整范围

易错点

  • 平台上显示已验证只证明签名对应账号,不证明代码经过评审或安全
  • 本地缺少对方公钥时会显示不可信,需要先导入公钥再判断
  • 历史重写会让原有签名失效,验证时以最终结果为准而不是旧分支上的结论
  • 只检查最新提交而不看整个提交范围,中间未签名的提交容易被漏过

数据来源与参考

  • Git 官方文档:git-verify-commit
  • GitHub Docs:About commit signature verification
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌