Skip to main content

如何批量修改歷史 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
  1. git filter-branch:這是一個強大的 Git 命令,用於重寫 Git 歷史記錄。它可以遍歷指定的提交範圍,並對每個提交應用過濾器。
  2. --env-filter:這是過濾器的類型,專門用於修改環境變量。在 Git 中,作者(author)和提交者(committer)的信息就是通過環境變量來設置的。
  3. 環境變量設置:
    • GIT_AUTHOR_NAME:原始提交的作者名字
    • GIT_AUTHOR_EMAIL:原始提交的作者郵箱
    • GIT_COMMITTER_NAME:執行提交操作的人的名字
    • GIT_COMMITTER_EMAIL:執行提交操作的人的郵箱
  4. HEAD~3..HEAD:這指定了要修改的提交範圍
    • HEAD~3:從當前提交往回數第三個提交
    • ..HEAD:一直到當前提交
    • 所以 HEAD~3..HEAD 表示最近的三個提交

所以整個命令的意思是:重寫最近三個提交的歷史,將每個提交中的作者和提交者信息都改為指定的新名字和新郵箱。 如果要修改所有提交歷史,可以省略範圍說明或使用 --all

如果已經推送到遠程,需要使用 git push -f 強制推送

設定當前倉庫的 Git 配置,避免再次使用錯誤的作者和郵箱

git config user.name "新的名字"
git config user.email "新的郵箱"