返回博客

Claude Code 署名关闭指南:去掉 Co-Authored-By(2026)

Claude Code 每次提交都带 Co-Authored-By 署名和 PR 页脚?2.1.281 的 attribution 设置一处全关:布尔简写、对象写法、作用域与旧键迁移,一文讲透。

2026年9月24日

用 Claude Code 提交过代码的人,几乎都见过那行不请自来的签名:commit 末尾挂着一条 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>,PR 描述顶部再来一句 🤖 Generated with Claude Code。整个 2026 年,reddit 和 HN 上「怎么不让 Claude 在我的 commit 里署名」的帖子就没断过——从 2.1.257 几个版本开始,署名盖得越来越勤,而官方文档里只有零零散散的线索。

转机出现在 2026 年 9 月 23 日Claude Code 2.1.281 正式上线了 attribution 设置——一处配置,把 commit 署名、PR 页脚、会话链接全部隐藏、改写或替换。但官方把这套配置拆成了四个键外加一条废弃说明,布尔简写只在 2.1.281+ 的版本上生效——团队里只要混着新旧版本,就有人会「明明设了却不生效」。

这篇文章把整件事一次讲清:一行关掉的写法、跨版本安全的对象写法、只关 commit 或只关 PR 的精细控制、那个废弃但还能用的旧键,以及每一步怎么验证真的生效了。

快速答案

  • 一行关闭(Claude Code 2.1.281+)settings.json 里写 "attribution": false——commit 署名、PR 页脚、会话链接一次性全隐。
  • 跨版本安全写法:用对象形式 { "commit": "", "pr": "", "sessionUrl": false },新旧版本都认。
  • 还在用旧版本? "includeCoAuthoredBy": false 已标记废弃,但当前版本仍然生效。
  • 精细控制:只想关 PR 页脚、保留 commit 署名(或反过来)——只设 attribution.commit / attribution.pr 其中一个。

Claude Code 到底往哪写了什么

位置默认内容控制键
Git commitCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>——模型名取自当前会话attribution.commit
Pull request描述顶部的 🤖 Generated with [Claude Code](https://claude.com/claude-code)attribution.pr
云端提交Claude-Session trailer,链接到 claude.ai 的会话记录(cloud / Remote Control 会话)attribution.sessionUrl

删之前有两个细节值得知道:

  • trailer 里的模型名是动态的。识别得出的 Claude 模型会写 Claude Sonnet 5Claude Opus 5.5;如果模型 ID 对不上任何已知 Claude 模型——比如你把 ANTHROPIC_BASE_URL 指向路由器或 DeepSeek 端点——它会退化成笼统的 Co-Authored-By: Claude Code
  • Claude Code 被告知:你自己的署名规则(CLAUDE.md 里写的那句、记忆里的约定)优先级高于它的默认署名——但 managed settings 里的配置永远最高。

一行关闭

把这段放进任意一个 settings 文件:

{
  "attribution": false
}

commit 里的 Co-Authored-By、PR 里的页脚文字、云端提交的 Claude-Session 链接,全部隐藏。这正是 2.1.281 更新日志里那句:"Added \"attribution\": false in settings.json to hide all commit and PR attribution."

放哪个文件,取决于你想让设置管多大范围:

文件作用范围
~/.claude/settings.json你自己,所有项目
.claude/settings.json所有 clone 这个仓库的人(要提交进 git)
.claude/settings.local.json只有你,且只有这个仓库(按惯例进 gitignore)
Managed settings组织管理员下发——覆盖一切

「我自己的 commit 永远不要署名」——放用户级文件;「这个开源仓库要干净的 git log,不管谁提交」——放提交进仓库的项目级文件。

跨版本安全的对象写法

2.1.281 的更新日志在新简写旁边附了一条警告:旧版本 CLI 会跳过含有这个设置的文件。只要你的团队(或者 CI 镜像、或者那台永远没人升级的服务器)还在跑 2.1.281 之前的版本,就用对象形式——所有现行版本都认识它:

{
  "attribution": {
    "commit": "",
    "pr": "",
    "sessionUrl": false
  }
}

commit 置空去掉 trailer,pr 置空去掉页脚文字,sessionUrl: false 去掉云端提交和 PR 里的会话链接。效果和布尔写法完全一样,代价是多三行。

对象写法也是做精细控制的方式——两个字段都接受自定义文本:

{
  "attribution": {
    "commit": "Co-Authored-By: Atlas (agent) <atlas@example.com>"
  }
}

这样会把默认 trailer 换成你自己的——团队规范想注明「这是 agent 干的」但又不想用 co-author 名义时很好用;或者你在让 Claude Code 跑别的模型,想让 trailer 写清楚真正干活的是谁。

那个废弃但还能用的旧键

2.1.281 之前,每个求助帖下面都会出现这个答案:

{
  "includeCoAuthoredBy": false
}

它现在仍然有效——当前版本认它,false 会同时去掉 commit trailer 和 PR 署名文字。但它已被正式标记废弃,而且有一条优先级规则要注意:一旦设置了 attribution.commitattribution.pr,Claude Code 就会忽略 includeCoAuthoredBy。几个月前设了旧键、现在要迁移的话,加新键时顺手把旧的删掉,不然你会在两份「真相来源」之间打转。

怎么验证生效了

attribution 设置只影响产生的提交。让 Claude Code 干一件事,然后检查:

# Claude Code 提交之后:
git log -1 --format=%B
# 干净:没有 Co-Authored-By。PR 再打开描述看一眼。

# trailer 还开着时,提交信息末尾长这样:
git log -1 --format=%B | tail -2

两个预期要提前有数:

  • 历史提交不受影响。 设置之前产生的 trailer 会永远留在那里,除非你改写历史(git rebase / git filter-repo)——那是团队决策,不是改配置。
  • Squash merge 会把 trailer 带出来——如果分支最后一个 commit 本来就有。设置只能阻止新的 trailer,擦不掉已经写进提交信息的内容。

FAQ

"attribution": false 能把以前的 commit 也改掉吗? 不能。它只让 Claude Code 以后不再加署名。历史提交里的 trailer 需要改写历史才能去掉。

设置了但没生效,为什么? 三个常见原因:版本低于 2.1.281 却用了布尔简写(换成对象写法);设置被更高优先级的文件覆盖(managed settings 最高,其次 --settings、项目 local、项目、用户);或者某处设置了 attribution.commit / attribution.pr,让废弃的 includeCoAuthoredBy 静默失效。跑 /statusclaude doctor 看哪些文件被加载了。

能保留 commit 署名、只去掉 PR 页脚吗? 可以——对象写法就是干这个的:attribution.pr 设成 ""commit 不动(反过来也一样)。

为什么我的 trailer 写的是 "Claude Code" 而不是模型名? trailer 默认写当前会话的 Claude 模型名。当模型 ID 对不上已知 Claude 模型——通常是 ANTHROPIC_BASE_URL 指向了路由器或第三方端点——就退化成笼统的 Claude Code

commit 里的 claude.ai 会话链接怎么去? 那是 cloud / Remote Control 会话的 Claude-Session trailer。布尔写法一并隐藏;对象写法里设 "sessionUrl": false

团队能统一强制吗? 可以。管理员下发的 managed settings 覆盖所有其他文件——不管用户或项目文件怎么写,组织层面说了算。

干净的历史,更便宜的提交

关掉署名往往是一场更大清理的第一步:让 agent 产生的提交和人的提交无法区分、批量跑、还不用心疼订阅额度。如果你正走到这一步,我们有两篇端到端的文档:

提交干净了、历史可读了,下一个瓶颈通常是「agent 到底该在哪干活」——Claude Projects 图文教程讲的就是这层工作区的用法。

延伸阅读