🚧修复 Git 错误用户提交的完整记录

内容纲要

在日常开发中,我们有时会不小心使用了错误的 Git 用户名或邮箱地址提交了代码,比如:

  • 误用公司账户提交了个人项目
  • 切换环境时忘记设置用户信息
  • 批量脚本提交时用户名配置错误

这篇文章记录一次我提交时用错用户信息的处理过程,包括如何撤销提交、如何重新提交、以及如何批量修复历史提交的作者信息。


🧭 一、问题背景

我在开发某个私有项目时,提交了如下内容:

git commit -m "fix: 修复逻辑错误"

提交后使用 git log 查看记录时,发现作者信息是错误的:

Author: wrong_user <wrong_email@example.com>

🛠 二、解决方案

✅ 情况一:刚提交,尚未 push 到远程仓库

可以使用 --amend 命令修改上一次提交的作者信息:

# 设置正确的 Git 用户信息
git config user.name "正确的用户名"
git config user.email "正确的邮箱地址"

# 修改上一次提交,重设作者
git commit --amend --reset-author

然后再次查看:

git log -1

确认作者信息已经被修改。


✅ 情况二:错误提交已被 push 到远程仓库

此时需要修改提交信息并强制推送(⚠️请确保了解风险):

git config user.name "正确的用户名"
git config user.email "正确的邮箱地址"

git commit --amend --reset-author

# 强制覆盖远程记录(请确保无其他协作者依赖历史)
git push --force

✅ 情况三:多个 commit 都使用了错误信息

可以使用交互式 rebase 批量修改:

git rebase -i HEAD~3   # 修改最近3次提交,数字可改

# 将目标 commit 前的 pick 改为 edit,保存退出

# 然后对每一个 edit 停止点执行:
git commit --amend --reset-author
git rebase --continue

🔄 补充操作:批量重写历史作者(全仓库)

如果你需要全仓库替换所有错误用户,可以使用如下脚本:

git filter-branch --env-filter '
WRONG_EMAIL="wrong_email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your_email@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

使用完后强制推送:

git push --force --all

📌 总结

情况 修复方式
最近一次提交 --amend --reset-author
多次提交 git rebase -i + --amend
全局修复 filter-branch
已推送远程 push --force(需谨慎)

建议你在每次新项目或切换环境后,都执行以下命令确保用户信息正确:

git config user.name
git config user.email

📎 参考资料

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward