跳到正文
文章 设计开发

移除 Git 提交里的 Co-authored-by: Cursor:排查、关闭与历史清理

移除 Git 提交里的 Co-authored-by: Cursor:排查、关闭与历史清理

先说结论:这行署名不是你仓库里的 hook 或模板加的,是 Cursor 自己塞的。关掉开关只能管住以后,已经提交的那些得重写历史才能去掉。下面是我自己踩完坑后的完整做法,命令都跑通了。

我遇到的情况

那天我在自己的项目里连着提交了十几次,回头翻  git log  想确认改了啥,结果发现每条 message 屁股后面都挂着一行:

我没写过这行,也没人帮我提交。更烦的是 code review 的时候,队友会盯着问「Cursor 是谁,怎么老在改我的文件」。我决定把它弄干净。

先搞清楚它从哪冒出来的

我第一反应是某个 git hook 或者提交模板干的。所以先排查,三条命令就够:

我这三条全是空的。也就是说,仓库本身是干净的——这行根本不来自我的项目,而是 Cursor 在提交时用  --trailer (老版本是  --footer )自己加上去的。

真正的开关在 Cursor 配置里

Cursor 把这个叫「归属(attribution)」,默认开着。CLI 的配置文件在用户目录下:

  • macOS / Linux: ~/.cursor/cli-config.json
  • Windows: %USERPROFILE%\.cursor\cli-config.json

我打开一看,末尾果然有这么一段(字段名和官方文档对得上):

attributeCommitsToAgent  管提交署名, attributePRsToAgent  管 PR 署名,默认都是  true

第一步:先把以后的关掉

两个地方都能关,我建议都确认一遍,因为 IDE 改了不一定同步到 CLI。

图形界面:进  Cursor Settings → Agents → Attribution ,把 Commit Attribution 和 PR Attribution 都关掉。关完一定整个重启 Cursor,光重启终端没用——这点我吃过亏。

CLI 配置:直接改  ~/.cursor/cli-config.json ,两个都设成  false

关掉之后,新提交就不会再带这行了。但历史里那一堆还在,得继续处理。

第二步:把已经提交的也清掉

这一步要重写提交记录。提醒一句,我也是确认过才敢动:重写会改掉 commit hash,只在还没推送、没跟别人共享的提交上做才安全。已经 push 出去的分支别这么搞,否则要 force push,还会连累队友。

先圈定范围

我只动「本地比远端多出来」的那些,已经发布的历史不碰:

我这边是领先 15 个,其中 13 个带署名,最早两个是手动提交的、干净的。

用 filter-branch 删掉那行

直接在命令行里写删除逻辑,引号能把人逼疯,所以我把它扔进一个临时脚本:

我用  perl -0777  把整条 message 当一整块来处理,连署名行前面那个多余空行一起吃掉,提交结尾不会留下空行。

验证一下,顺手收尾

我跑完输出是  0git log  也干净了。确认没问题再正常  git push  就行,未推送的提交不需要 force。

如果你装了 filter-repo,更省事

git filter-branch  官方其实已经不推荐了,慢又容易出岔子。要是能装  git-filter-repo ,我更推荐它:

万一关了还在加?两个兜底

我查的时候看到不少人反馈,有些 CLI 版本或者公司开了 Enterprise 的,本地配置会被无视,照样加。准备两手:

兜底一,仓库级 hook 强删。 这招最硬,提交前直接把那行删掉:

.git/hooks/  不进版本控制,重新 clone 之后得再建一遍。

兜底二,给 AI 加条规则。 在  Cursor Settings → Rules for AI  或项目的  .cursor/rules  里写一句:

如果你是 Enterprise,团队后台可能强制开了归属,本地怎么改都没用,只能找管理员关。

我踩过的几个坑

  • 改的是 Cursor 的配置,不是 git 配置,不用担心动到你的 git 设置。
  • cli-config.json 是用户级、全局的,会影响你所有项目;要是个别项目想留着署名,得单独处理。
  • 关开关和清历史是两回事,别以为关了开关历史就干净了。
  • 重写历史只在没推送的提交上安全,推过的别乱动。
  • 改完不生效,先把 Cursor 整个重启,再考虑是不是版本问题或者团队强制策略。

参考来源


关键词:Cursor、Co-authored-by、cursoragent@cursor.com、Git 提交署名、attributeCommitsToAgent、cli-config.json、git filter-branch、git filter-repo、移除 Cursor 署名、prepare-commit-msg。