1. 程式人生 > 其它 >Git 修改歷史 commits 中的使用者名稱和郵箱

Git 修改歷史 commits 中的使用者名稱和郵箱

一、作用

  • 修改某個倉庫歷史 commit 的使用者 name 和 email 資訊。
  • 將歷史提交記錄中的指定 name/email 修改為新的 name/email。

二、步驟

  • 確認本地全域性郵箱/使用者名稱
  • 檢視倉庫的歷史提交資訊
  • 批量修改歷史記錄中的資訊
  • 將修改結果推送到遠端

1. 確認本地全域性郵箱/使用者名稱

使用下面兩個命令檢視 git 在本地的全域性郵箱和使用者名稱。

bash
git config user.name
git config user.email

  

如果需要修改 git 在本地的全域性郵箱和使用者名稱,執行下面的命令。

bash
git config --global user.name "輸入你的使用者名稱"
git config --global user.email "輸入你的郵箱"

  

現在我們已經設定好了本地 git 的 user.name 和 user.email 資訊。

2. 檢視倉庫的歷史提交資訊

git clone你要修改的倉庫,進入該倉庫目錄,開啟 git bash 介面,執行git log命令檢視歷史提交資訊(重點關注 Author)。

3. 批量修改歷史記錄中的資訊

開啟一個文字編輯器,貼上下面程式碼。
然後把OLD_EMAIL,CORRECT_NAME,CORRECT_EMAIL改成自己的新舊郵箱使用者名稱。

bash
git filter-branch -f --env-filter '
OLD_EMAIL="原來的郵箱"
CORRECT_NAME="現在的名字"
CORRECT_EMAIL="現在的郵箱"
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

  

回到 git bash 介面,複製貼上上面的程式碼並按回車執行。
如果 commit 記錄比較多的話執行的時間會比較長。

等待執行完成後,再檢視git log可以看到已經修改成功。

特殊情況:
如果上面的批量修改命令執行失敗的話,執行一下這段命令:

bash
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

  

再次複製貼上批量修改的程式碼並按回車執行。

4. 將修改結果推送到遠端

這時候雖然本地修改成功了,但是你還沒有推送到遠端。
所以再執行一下命令:

bash
git push origin --force --all

  

去看一下 Github 你就會發現之前的提交記錄中,name 和 email 資訊都更新了。

三、Linux/Mac下可以寫個指令碼

在專案根目錄下建立git-email.sh,寫入下面這段程式碼:

bash
#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="原來的郵箱"
CORRECT_NAME="現在的名字"
CORRECT_EMAIL="現在的郵箱"

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

  

然後需要賦予執行許可權:

bash
chmod +x git-email.sh

  

執行一下這個.sh檔案:

bash
./git-email.sh

  

git log檢查修改成功後,最後別忘了推送到遠端倉庫。

我的GitHub:https://github.com/lelelongwang