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且作者信息被覆盖,可按以下步骤修正:
- 用
git log --pretty=full找到被覆盖的原提交的作者姓名和邮箱。 - 执行
git commit --amend --no-edit --author="原作者名 <原邮箱>",将当前提交的作者改回原贡献者;若提交包含多个贡献者,同时添加对应的Co-authored-by标签。
日常PR场景建议
在日常开发和PR流程中,尽量避免对包含多作者的提交链进行多次squash。如果需要合并小提交,建议在个人分支上完成单次squash并添加所有Co-authored-by信息后,再推送至远程发起PR,减少后续二次合并带来的信息丢失风险。
内容的提问来源于stack exchange,提问作者Juris Kristaps Sūrums
相关产品推荐
相关产品推荐

