作者与提交者的区别
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 和代提交时变化 |
导入外部补丁保留原作者、提交者记为当前用户;贡献统计通常按作者归属,但「谁把改动放进主干」要看提交者,两个视角配合使用。改编他人代码时注意署名礼仪,别把原作者抹掉;对外开源贡献尤其注意这一点。