最近在折腾 Claude Code 这款开发工具时,发现了一个让人哭笑不得的细节:不管我用什么模型让它提交 Git,提交记录里的作者栏总是写着 Claude。

起初我以为是默认配置问题,于是特意把底座模型换成了 GLM 5.2。结果重新打包提交后,打开 Git 历史一查——依然是 "Claude" 没跑了。

这就很有意思了。到底是模型自己“冒名顶替”,还是 Claude Code 在背后偷偷搞了“强制署名”?今天就来扒一扒这背后的技术逻辑。

01 表面现象:换了“芯”还是认“爹”

Git 提交历史记录界面示例

Git 提交历史记录中通常包含作者姓名和邮箱等元信息。

正常情况下,一个 Git 提交的作者信息由两部分决定:

  1. 你的 Git 配置(user.name 和 user.email);
  2. 你在提交时手动指定的 --author 参数。

但 Claude Code 的行为显然超出了这套规则。哪怕你明确指定了底层模型是 GLM 5.2,只要提交动作是通过 Claude Code 完成的,最终提交者就是 Claude。

这不禁让人怀疑:是不是 Claude Code 在发给模型的系统提示词里,偷偷加了“请把作者写成我”的指令?

02 技术拆解:工具层面的“作者劫持”

实际上,这大概率不是模型的自我意识,而是工具本身的硬编码逻辑。

Claude Code 作为一个开发辅助工具,它的 Git 操作流程通常是这样的:

Git 命令行执行提交操作示意图

在终端中使用 git commit 命令配合 --author 参数可以强制指定提交者信息。

  1. 接收用户指令(比如“帮我优化这个函数并提交”);
  2. 调用模型生成代码(这一步确实可以用 GLM 5.2 等其他模型);
  3. 执行 Git 命令(注意!这里才是关键)。

问题就出在第三步。工具在执行 git commit 时,很可能直接传入了固定的 --author="Claude <[email protected]>" 参数,或者干脆修改了当前的 Git 配置。这种“作者劫持”完全是工具层面的操作,和你用了什么模型生成代码毫无关系。

03 为什么要这么做?

Anthropic 这样设计可能有两个目的:

  • 透明度:让团队清楚知道哪些提交是 AI 辅助完成的,避免混淆;
  • 品牌露出:毕竟 Claude Code 是 Anthropic 的产品,让提交署名带上品牌也是一种“签名”。

但这也带来了一个问题:如果用户想在 Git 历史里保留自己的真实署名,或者需要符合公司内部的提交规范,就会很麻烦。

04 如何绕过这个限制?

如果你实在受不了这个“自动署名”,可以尝试以下几种方案:

方案一:手动修改最后一笔提交

如果你提交后立刻发现问题,可以用 Git 命令修正:

git commit --amend --author="Your Name <[email protected]>"

方案二:全局配置钩子

.git/hooks/pre-commit 里添加一段脚本,强制覆盖作者信息:

#!/bin/bash
git config user.name "Your Name"
git config user.email "[email protected]"

方案三:放弃工具的 Git 功能

最彻底的方法是不让 Claude Code 直接操作 Git。你可以只让它生成代码或修改文件,然后自己手动提交。虽然麻烦点,但至少能掌控提交记录。

05 总结

Claude Code 的“自动署名”行为,本质上是一个工具层的硬编码逻辑,和底层模型的选择无关。这种设计在提升透明度的同时,也牺牲了一部分用户自定义的灵活性。

如果你对 Git 提交历史有严格要求,建议提前测试工具的行为,或者手动接管 Git 操作。毕竟——代码是 AI 写的,但署名权得是你自己说了算。

标签: none

评论已关闭