如何批量修改 GitHub 代码提交作者
批量修改 GitHub 代码提交作者需要进行以下步骤:
该操作如果涉及default分支的话 请确保有push的权限!
-
首先,你需要 clone 远程仓库到本地,使用以下命令:
git clone <repository-url> ``` 将 `<repository-url>` 替换为要克隆的仓库的 URL。
-
进入到克隆下来的代码库目录,使用以下命令查看所有提交记录:
git log ``` 检查要修改的提交记录的哈希值。
-
使用以下命令将要修改的提交记录的作者和邮箱修改为新的作者和邮箱:
git filter-branch --env-filter ' OLD_EMAIL="old-email@example.com" CORRECT_NAME="New Author Name" CORRECT_EMAIL="new-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 ``` 将 `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/*' ``` 这个命令会将修改后的提交记录推送到所有分支和标签。
请注意,由于这个操作会修改历史提交记录,因此可能会影响其他开发者的代码库。如果其他开发者基于修改前的提交记录进行了开发,可能会导致代码库的不一致性或冲突,因此在进行此操作之前,请确保已经与其他开发者进行了充分的协商和确认。此外,建议在执行此操作之前先对代码库进行备份。
另外,如果你是多人协作开发的团队,建议在进行此操作之前与其他成员进行充分的沟通和确认,以避免不必要的冲突和误解。