如何批量修改歷史 commit 作者及郵箱
使用 git filter-branch
git filter-branch --env-filter '
export GIT_AUTHOR_NAME="新的名字"
export GIT_AUTHOR_EMAIL="新的郵箱"
export GIT_COMMITTER_NAME="新的名字"
export GIT_COMMITTER_EMAIL="新的郵箱"
' HEAD~3..HEAD
git filter-branch
:這是一個強大的 Git 命令,用於重寫 Git 歷史記錄。它可以遍歷指定的提交範圍,並對每個提交應用過濾器。--env-filter
:這是過濾器的類型,專門用於修改環境變量。在 Git 中,作者(author)和提交者(committer)的信息就是通過環境變量來設置的。- 環境變量設置:
- GIT_AUTHOR_NAME:原始提交的作者名字
- GIT_AUTHOR_EMAIL:原始提交的作者郵箱
- GIT_COMMITTER_NAME:執行提交操作的人的名字
- GIT_COMMITTER_EMAIL:執行提交操作的人的郵箱
- HEAD~3..HEAD:這指定了要修改的提交範圍
- HEAD~3:從當前提交往回數第三個提交
- ..HEAD:一直到當前提交
- 所以 HEAD~3..HEAD 表示最近的三個提交
所以整個命令的意思是:重寫最近三個提交的歷史,將每個提交中的作者和提交者信息都改為指定的新名字和新郵箱。 如果要修改所有提交歷史,可以省略範圍說明或使用 --all
如果已經推送到遠程,需要使用 git push -f
強制推送
設定當前倉庫的 Git 配置,避免再次使用錯誤的作者和郵箱
git config user.name "新的名字"
git config user.email "新的郵箱"