Git提交邮箱与GitHub账户不匹配导致贡献未统计,需通过查(定位错误提交)、改(amend/rebase/filter-repo修正作者信息)、推(--force-with-lease同步)三步修复,历史重写须协同确认并预防性配置。

这个问题核心在于:Git 提交的 author 和 committer 邮箱与 GitHub 账户绑定邮箱不匹配,导致贡献图(contributions graph)无法识别提交者身份。一旦错误邮箱被大量使用并推送到远程,统计就会“断连”或“挂到别人名下”。解决需分三步走——查、改、推,且必须注意历史重写的风险和协作约束。
一、快速定位问题提交范围
先确认哪些 commit 用了错误邮箱:
- 运行
git log --pretty=format:"%h %an <%ae> %s" --since="3 months ago"查看近期提交作者信息 - 用
git log --author="wrong@example.com" --oneline精准筛选错误邮箱的提交 - 重点检查是否已 push:执行
git log origin/main..HEAD(替换main为当前分支),只处理尚未推送的提交可避免强制推送;若已推送,则后续必须强推且通知协作者
二、按场景选择修复方式
不是所有情况都适合重写历史。优先级从高到低:
辅助阅读和快速理解 GitHub/Git 项目结构与核心价值的结构化方法论。 当用户请求"分析这个 GitHub 项目"、"帮我读一下这个 repo"、"了解这个项目是做什么的"、 "怎么用这个项目"、"怎么跑这个项目"、"这个项目用了哪些技术",或任何涉及 GitHub/Git 仓库阅读、理解、技术评估、快速上...
-
仅最后一个 commit 错了:直接修正,安全无副作用
git commit --amend --author="Correct Name <correct@domain.com>" --no-edit -
最近几个 commit(≤5个)都错了:交互式 rebase 逐个修正
git rebase -i HEAD~5,把要改的行前改成edit,保存后对每个停住的 commit 执行:git commit --amend --author="Correct Name <correct@domain.com>" --no-edit && git rebase --continue -
大量历史 commit(如整个项目初期)都用了错误邮箱:用
git filter-repo(推荐,filter-branch已弃用)批量重写
安装后运行:git filter-repo --mailmap .mailmap
其中.mailmap文件内容格式为:Correct Name <correct@domain.com> <wrong@example.com>
三、安全同步到远程并验证效果
本地历史修改后,远程仓库必然出现分叉,必须强制推送:
- 确保没有其他人正在基于这些 commit 开发,否则会破坏协作
- 执行
git push --force-with-lease origin main(比--force更安全,防止覆盖他人新提交) - 等待 GitHub 同步(通常 UTC 时间次日 00:00 更新 contributions 图)
- 验证是否生效:访问
https://github.com/username/repo/commits,点开任一修改后的 commit,检查 “committed by” 是否显示你的头像和用户名;再打开个人主页 contributions 图,观察对应日期是否变绿
补一句:预防胜于修复。建议团队在项目根目录放 .gitconfig 或通过 git config --local 统一设置,并加入 pre-commit 钩子校验邮箱格式与预设域名匹配。这样一次配置,长期安心。

















