如何在共享Git仓库中修正特定用户的提交历史信息
修复Git提交中错误的姓名与邮箱
步骤1:创建正确的.mailmap文件
针对你需要修正的两个错误条目,在仓库根目录创建.mailmap,每行对应一组「目标正确信息→待修正错误信息」的映射,格式如下:
NameLine4 <MailLine4> NameLine2 <MailLine2> NameLine4 <MailLine4> NameLine3 <MailLine3>
注意:每行前半部分是你要统一成的正确姓名邮箱,后半部分是需要替换的错误条目,每个错误条目单独占一行。
步骤2:用git filter-repo定向修正你的提交
为了避免误改其他贡献者的提交,添加过滤条件只处理你的错误邮箱对应的提交,执行以下命令(替换其中的错误邮箱为你实际的错误邮箱):
git filter-repo --force --mailmap .mailmap --commit-callback ' if commit.author_email in [b"错误邮箱1", b"错误邮箱2"] or commit.committer_email in [b"错误邮箱1", b"错误邮箱2"]: pass else: skip() '
步骤3:验证修正结果
执行命令检查提交统计:
git shortlog -sne
确认你的错误条目已合并到正确的NameLine4 <MailLine4>下,提交总数正确,且其他贡献者的条目未被修改。
步骤4:强制推送修正后的历史
由于重写了Git历史,需要强制推送到远程仓库(建议先备份远程仓库或本地仓库):
git push --force-with-lease origin 你的分支名
使用--force-with-lease比直接--force更安全,可避免覆盖他人刚推送的提交。
重要注意事项
- 执行
git filter-repo前务必备份仓库,该命令会永久修改历史,出错后难以恢复。 - 如果之前的操作已导致仓库混乱,可通过Git reflog或远程仓库备份恢复到操作前的状态,再重新执行上述步骤。
内容的提问来源于stack exchange,提问作者bbasaran
相关产品推荐
相关产品推荐

