Claude Code 署名关闭指南:去掉 Co-Authored-By(2026)
Claude Code 每次提交都带 Co-Authored-By 署名和 PR 页脚?2.1.281 的 attribution 设置一处全关:布尔简写、对象写法、作用域与旧键迁移,一文讲透。
用 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 commit | Co-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 5、Claude 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.commit 或 attribution.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 静默失效。跑 /status 或 claude 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 产生的提交和人的提交无法区分、批量跑、还不用心疼订阅额度。如果你正走到这一步,我们有两篇端到端的文档:
- Claude Code router 教程:把 Claude Code 指向任意 OpenAI 兼容后端——包括 DeepSeek API——批量任务的花费从额度变成几分钱。
- DeepSeek harness 搭建指南:不用 Claude Code 时,把同样的模型接进其他终端 agent。
提交干净了、历史可读了,下一个瓶颈通常是「agent 到底该在哪干活」——Claude Projects 图文教程讲的就是这层工作区的用法。
延伸阅读
- Claude Pro 默认模型切换 Opus 5.5——2.1.28x 系列里另一个引发热议的设置变更
- agents.md 模板库——把仓库规范(包括署名规则)写成 agent 真会读的约定
- Codex 用量面板——OpenAI 那边的「谁干了什么、花了多少」
- Claude Projects 图文教程——分步截图讲完 Projects 工作区的设置与日常使用
