批量修改 GitHub 代碼提交作者需要進行以下步驟:
該操作如果涉及default分支的話 請確保有push的權限!
-
首先,你需要 clone 遠程倉庫到本地,使用以下命令:
git clone <repository-url> ``` 將 `<repository-url>` 替換爲要克隆的倉庫的 URL。
-
進入到克隆下來的代碼庫目錄,使用以下命令查看所有提交記錄:
git log ``` 檢查要修改的提交記錄的哈希值。
-
使用以下命令將要修改的提交記錄的作者和郵箱修改爲新的作者和郵箱:
git filter-branch --env-filter ' OLD_EMAIL="[email protected]" CORRECT_NAME="New Author Name" CORRECT_EMAIL="[email protected]" 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 ``` 將 `OLD_EMAIL` 替換爲要修改的舊郵箱地址,`CORRECT_NAME` 替換爲新的作者名字,`CORRECT_EMAIL` 替換爲新的郵箱地址。注意,這個命令會將舊的提交記錄複製一份,將舊的作者和郵箱替換爲新的作者和郵箱。這意味着你需要使用 `git push --force` 命令強制推送修改後的提交記錄到遠程倉庫。 或者匹配規則改爲
OLD_NAME也可以。
如果提示已經存在:Proceeding with filter-branch...
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f
按要求添加強制’-f‘改爲git filter-branch -f --env-filter
執行完該命令後提示哪些分支及tag的記錄被修改(需要注意的是 本地倉庫checkout過的分支纔會修改哦!所以需要提交每個遠程分支都拉一下)
-
使用以下命令強制推送修改後的提交記錄到遠程倉庫:
git push --force --tags origin 'refs/heads/*' ``` 這個命令會將修改後的提交記錄推送到所有分支和標籤。
請注意,由於這個操作會修改歷史提交記錄,因此可能會影響其他開發者的代碼庫。如果其他開發者基於修改前的提交記錄進行了開發,可能會導致代碼庫的不一致性或衝突,因此在進行此操作之前,請確保已經與其他開發者進行了充分的協商和確認。此外,建議在執行此操作之前先對代碼庫進行備份。
另外,如果你是多人協作開發的團隊,建議在進行此操作之前與其他成員進行充分的溝通和確認,以避免不必要的衝突和誤解。