← 返回首页

修改 Git 提交者信息

#tool

最近整理仓库时,发现很多win 和 wsl上提交的乱提交者信息


修改最近一次提交 (Last Commit)

刚刚完成提交,发现用户名或邮箱写错了,用 --amend 命令。

  • 修改为当前全局配置的信息:
      git commit --amend --reset-author --no-edit
    
  • 手动指定修改信息:
      git commit --amend --author="用户名 <邮箱@example.com>" --no-edit
    

    --no-edit 表示保持原有的提交说明不变。


2. 修改历史中的某一次提交

要修改的不是最后一次,需要使用交互式变基

  1. 启动变基: 找到想修改的提交的前一个提交ID(例如 abc1234)。
    git rebase -i abc1234
    
  2. 编辑标记: 在弹出的文本编辑器中,将目标提交前的 pick 改为 edit,然后保存退出。
  3. 修改信息:
    git commit --amend --author="用户名 <邮箱@example.com>" --no-edit
    
  4. 完成变基:
    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 "你的邮箱"
    

⚠️

  1. 不要在公共分支上操作: 修改历史提交会改变提交的 Hash ID。如果你已经将代码 push 到了远程仓库,修改历史后必须使用 git push --force 强制推送。这会干扰其他协作开发者的分支,请务必先与团队沟通
  2. 备份: 在进行批量修改(如 filter-branch)之前,建议先备份仓库。