【Git】批量修改已提交之 username 與 email


Posted by Jianna on 2021-08-26

有一天突然發現 GitHub 上的 commit 記錄竟然不是自己原先設定的用戶名,才真正了解到最近幾次 commit 都沒有在 contributions 上顯示綠點點的原因。

爬了文之後發現大多數的人都和我一樣,換了 MacOS 之後,沒有再去設定 git 上的 user 資訊,因此系統便用了預設的 username 與 email (-MacBook-Pro.local)替我們進行 commit。

有了這次教訓,以後要是換到新環境,一定都要記得先設定好作者資訊(global 即設定為全域)。

git config --global user.email "email"
git config --global user.name "username"

解決辦法

在爬文後根據此篇 修改 git repo 历史提交的 author 得知,可以使用 git rebase 的方法來修改,可選擇調整範圍、逐筆修改。而我原先是想使用這個方法操作的,因為我要修改的筆數大概也就只有四筆,心想應該可以很快完成。可是使用這個方法會覆蓋原有的 commit ID(算是重新提交?),這樣的操作對我這個新手來說實在是太可怕了,有好幾次我都搞混了現在所在的位置到底是哪一筆。

於是我又爬到了這個方法:修改git全部已提交的使用者名稱和郵箱,雖然我還沒搞懂它實際上用的是什麼方法,但應該是類似於直接覆蓋舊的 commit 歷史,實在是太方便啦~

#!/bin/sh

git filter-branch --env-filter '

// 只需調整以下三個變數
OLD_EMAIL="your-old-email@example.com" 
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@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

最後再 push 回遠端就可以了~
我在 push 的過程中有遇到一些衝突,不過我在操作前才又重新把遠端的檔案 clone 下來,因此就無懸念的使用了 git push --force origin master

小小備註

由於我操作的 repo 只有我自己在使用,加上我的強迫症作祟,才會讓我極度的想把舊的 commit 改掉。若為團隊合作專案,千萬要小心使用,當然是強烈建議別這麼做,否則可能會有解不完的衝突XD。


#Git #Github #author info







Related Posts

利用 box-shadow 畫出任何圖案

利用 box-shadow 畫出任何圖案

[Golang] strconv

[Golang] strconv

[ week11 ] 實戰練習-部落格(以 PHP 實作前、後端)

[ week11 ] 實戰練習-部落格(以 PHP 實作前、後端)


Comments