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

Git rebase多次squash提交导致贡献者信息被覆盖的问题求助

解决Git Rebase Squash丢失贡献者信息的问题

问题根源

执行git rebase -i HEAD~x进行squash合并时,Git默认会把合并后的提交作者设为当前执行rebase操作的用户。首次合并时文件变更的作者标记暂时保留,但二次squash会覆盖早期提交的作者信息,导致最初贡献者的变更归属被替换。

可行解决方案

1. 合并时添加Co-authored-by标签保留所有贡献者

在rebase的提交编辑界面,把需要合并的提交标记为squash后,保存进入提交信息编辑页面。在默认提交内容下方添加所有贡献者的Co-authored-by字段,格式如下:

Co-authored-by: 贡献者A <a@example.com>
Co-authored-by: 贡献者B <b@example.com>

保存提交后,该合并提交会在Git中显示所有参与贡献的作者,变更归属信息不会丢失。

2. 改用fixup或edit标记替代多次squash

  • 如果仅需合并提交内容但保留原作者信息,可将目标提交标记为fixup而非squash。fixup会合并提交内容,但不会修改原提交的作者信息(适合将新提交合并到已有多作者提交的场景)。
  • 若需要调整提交内容并保留原作者,可将提交标记为edit,修改完成后执行git commit --amend --no-edit(--no-edit参数会保留原作者信息),再继续git rebase --continue。

3. 手动修正已覆盖的作者信息

如果已经完成rebase且作者信息被覆盖,可按以下步骤修正:

  1. 用git log --pretty=full找到被覆盖的原提交的作者姓名和邮箱。
  2. 执行git commit --amend --no-edit --author="原作者名 <原邮箱>",将当前提交的作者改回原贡献者;若提交包含多个贡献者,同时添加对应的Co-authored-by标签。

日常PR场景建议

在日常开发和PR流程中,尽量避免对包含多作者的提交链进行多次squash。如果需要合并小提交,建议在个人分支上完成单次squash并添加所有Co-authored-by信息后,再推送至远程发起PR,减少后续二次合并带来的信息丢失风险。

内容的提问来源于stack exchange,提问作者Juris Kristaps Sūrums

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:57:58