首页/开发/Git 与协作速查/git commit -s 添加签署行
协作与代码评审75 条

git commit -s 添加签署行

在提交信息尾部追加 Signed-off-by: 作者名 <邮箱>,与 DCO 配套;也可在 merge、revert 等操作时附带签署。

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

签署行是什么

-s 选项会在提交信息末尾追加一行签署声明,写明作者姓名与邮箱。它是配合开发者原创声明使用的证书声明,用来确认提交者有权按项目许可证提交这段代码;合并、回退等操作同样可以带上这个选项。要注意的是,它加的是声明,不是密码学签名。

基本信息

语法git commit -s 或 git commit --signoff
追加内容一行签署声明,取自提交者姓名与邮箱
批量补签git rebase --signoff <基点>(Git 2.20 起)
与加密签名区别声明代码来源,不做密码学验证
身份来源提交配置中的姓名与邮箱

典型使用场景

  • 向采用开发者原创声明的开源项目提交代码
  • 公司合规流程要求逐提交留痕
  • 用交互式变基为历史提交批量补签署行
  • 合并与回退提交同样需要声明来源时
  • 定期核对某段提交是否都已带签署行

常用示例

常用示例
git commit -s -m 'docs: 更新贡献者名单'                 # 提交时追加签署行
git rebase --signoff origin/main                         # 给这一段提交批量补签署
git log --format='%h %(trailers:key=Signed-off-by)' -5   # 查看签署行
git config user.name; git config user.email              # 核对签署使用的身份

与加密签名对照

项作用注意事项
签署行声明来源与授权取自身份配置,需要真实信息
加密签名验证提交未被篡改需要密钥与签名配置
补签操作为已有提交追加声明会改写提交,哈希随之变化
签署行加的是证书声明,不是加密签名。需要密码学验证的场合要使用密钥签名提交,两者作用不同,也可以同时使用。
签署行里的姓名与邮箱来自提交身份配置,用昵称签署在合规场景下不一定被接受,贡献前先把身份配置成真实信息。
多人的提交汇入同一条历史时,每行的签署行各自对应提交者,不要统一替换成同一个身份,否则声明与实际来源不符。

易错点

  • 提交身份是昵称时,签署行不具备声明效果,贡献前先把身份配置成真实信息
  • 补签会改写历史,已经推送的分支需要强推并在评审请求中说明
  • 把签署行当成加密签名来依赖,实际无法验证提交内容是否被篡改
  • 只给部分提交补签,按提交逐个校验的机器人依然会判定不通过

数据来源与参考

  • Git 官方文档:git-commit(--signoff)
  • Git 官方文档:git-rebase(--signoff)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌