You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub squash合并后git quick-stats及贡献统计错误如何解决

核心原因确认

squash merge 会将源分支的所有提交压缩为单个全新提交,默认提交作者、提交者均为执行合并操作的账号,且原始提交历史不会带入目标分支。所有基于目标分支提交日志做统计的工具(包括 git 原生统计、git-quick-stats、GitHub 贡献面板)都会默认将该次压缩提交的所有变更计入合并者名下,你的判断完全正确。

可行解决方案

1. 基于原始feature分支统计(无需修改现有仓库结构,准确率最高)

  • 只要保留了完整的feature分支提交历史,直接指定分支统计即可得到正确数据,git-quick-stats 对应命令为:
    git quick-stats -b <你的feature分支名> contributors
  • 如果已经删除了远程feature分支,可从本地reflog恢复:执行git reflog找到feature分支最后一次提交的哈希值,再执行git checkout -b <恢复后的分支名> <提交哈希>即可恢复分支用于统计。

2. 合并前调整提交元数据(一劳永逸,同时修复GitHub贡献统计)

  • 执行squash merge编写提交信息时,在信息末尾补加所有参与开发的协作者的Co-authored-by字段,格式如下:

功能描述:完成XX需求开发

Co-authored-by: 同事A <同事A的GitHub绑定邮箱>
Co-authored-by: 同事B <同事B的GitHub绑定邮箱>

  • 补充该字段后,GitHub贡献面板会自动将该提交的贡献同步计入所有协作者账号,git-quick-stats 也支持识别该字段完成准确统计。

3. 用git原生命令溯源统计(无需依赖第三方工具)

如果不想恢复分支,也可以通过git原生命令遍历全量提交历史,统计真实贡献数据,参考命令如下:
git log --all --pretty=format:"%an %ae" --numstat | awk '{ add += $1; subs += $2; if (NF>2) author = substr($0, index($0,$3)) } END { printf "%s: 新增 %d 行, 删除 %d 行\n", author, add, subs }'
该命令会直接读取提交原始作者信息,不会被squash merge后的提交作者覆盖。

后续优化建议

如果团队对贡献统计准确性要求较高,建议尽量避免对多人协作的feature分支执行squash merge到公共开发分支,改用保留完整提交历史的普通合并,或要求开发者推送代码前自行rebase整理提交后再合并,从根源上避免统计偏差。


内容的提问来源于stack exchange,提问作者Tony Borchert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:27:03