最近整理仓库时,发现很多win 和 wsl上提交的乱提交者信息
修改最近一次提交 (Last Commit)
刚刚完成提交,发现用户名或邮箱写错了,用 --amend 命令。
- 修改为当前全局配置的信息:
git commit --amend --reset-author --no-edit - 手动指定修改信息:
git commit --amend --author="用户名 <邮箱@example.com>" --no-edit--no-edit表示保持原有的提交说明不变。
2. 修改历史中的某一次提交
要修改的不是最后一次,需要使用交互式变基。
- 启动变基:
找到想修改的提交的前一个提交ID(例如
abc1234)。git rebase -i abc1234 - 编辑标记:
在弹出的文本编辑器中,将目标提交前的
pick改为edit,然后保存退出。 - 修改信息:
git commit --amend --author="用户名 <邮箱@example.com>" --no-edit - 完成变基:
git rebase --continue
3. 批量修改历史提交 (慎用)
要更换整个仓库历史中某个特定邮箱的所有提交记录时,可以用 git filter-repo或传统的 git filter-branch。
使用 git filter-branch
在仓库根目录运行以下脚本(记得将旧邮箱、新名字、新邮箱替换为对的~):
git filter-branch --env-filter '
OLD_EMAIL="old@example.com"
CORRECT_NAME="NewName"
CORRECT_EMAIL="new@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
4. 预防措施:设置正确的配置
为了避免以后再次出错,建议检查并设置好 Git 配置:
- 全局设置(作用于所有项目):
git config --global user.name "你的名字" git config --global user.email "你的邮箱" - 当前项目设置(覆盖全局,适用于区分工作/个人项目):
git config user.name "你的名字" git config user.email "你的邮箱"
⚠️
- 不要在公共分支上操作: 修改历史提交会改变提交的 Hash ID。如果你已经将代码
push到了远程仓库,修改历史后必须使用git push --force强制推送。这会干扰其他协作开发者的分支,请务必先与团队沟通。 - 备份: 在进行批量修改(如
filter-branch)之前,建议先备份仓库。