首页/开发/Git 与协作速查/作者(author)与提交者(committer)的区别
协作与代码评审75 条

作者(author)与提交者(committer)的区别

作者是写改动的人,提交者是实际执行提交的人;平台按两者分别展示(committed by / authored by),rebase、打补丁等操作会改变提交者。

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

作者与提交者的区别

Git 提交同时记录两个身份:作者(author)是写改动的人,提交者(committer)是实际执行提交的人。平时两者一致;代他人提交、rebase 重放、应用邮件补丁(git am)后会分化。平台按两者分别展示(authored by / committed by),贡献统计通常按作者归属,但「谁把改动放进主干」要看提交者,两个视角配合使用。

基本信息

作者git commit --author='Name <email>';历史重放保持原作者
提交者执行提交时的 user.name/user.email;可用 GIT_COMMITTER_NAME/EMAIL 覆盖
查看git log --format='%an %cn' 分别对出两个名字
典型场景代他人提交、rebase 重放、邮件补丁应用
相关署名核对、贡献统计、合规审计
实用动作代提交前先与原作者核对姓名拼写与邮箱

典型使用场景

  • 采纳外部补丁:git am 保留原作者,提交者记为当前用户。
  • rebase 重放:作者不变,提交者变成执行变基的人。
  • 代提交:同事写好补丁,你代为提交并保留其作者身份。
  • 自动化机器人:用 GIT_COMMITTER_* 标记流水线提交者。
  • 审计追溯:把「谁写的」与「谁合入的」分开核对。
  • 贡献归档:按作者统计贡献时不被重放操作干扰;审计则按提交者追执行人。
  • 教学讲解:解释「为什么同事的提交显示在你的名下」这类常见困惑。

查看与覆盖

查看与覆盖
git log --format='%h A:%an C:%cn' -5   # 对比作者与提交者
git commit --author='Alice <alice@example.com>' -m 'fix: 采纳同事补丁'
GIT_COMMITTER_NAME=bot GIT_COMMITTER_EMAIL=bot@example.com git commit -m 'chore: 自动同步'
# 补丁应用:作者来自补丁内容,提交者是你
git show --format=fuller HEAD            # 同时展示两个身份与时间戳

常用格式占位

占位含义变化场景
%an作者名写改动的人
%ae作者邮箱联系与统计依据,通常不变
%cn提交者名执行提交的人
%ce提交者邮箱rebase 和代提交时变化
导入外部补丁保留原作者、提交者记为当前用户;贡献统计通常按作者归属,但「谁把改动放进主干」要看提交者,两个视角配合使用。改编他人代码时注意署名礼仪,别把原作者抹掉;对外开源贡献尤其注意这一点。

易错点

  • rebase 后提交者变成执行变基的人、作者不变;署名核对时别混淆两个字段。
  • 手动把作者改成他人属于不实归属,仅限确为对方作品的场景;否则改用共同作者约定或在提交说明注明。
  • 用 GIT_COMMITTER_* 覆盖时只设了名字没设邮箱,两个字段不一致;两个环境变量要成对设置。
  • 依赖「提交者等于作者」的脚本在 rebase 后判断失准;脚本里明确指定用哪个字段。

数据来源与参考

  • Git 官方文档:git-commit(--author)
  • Pro Git 2nd Edition · 5.3 维护项目
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌