修改Git历史提交中的username和email
可以通过使用 Git 的 filter-branch
或 filter-repo
工具来更改所有历史提交中的 user.name
和 user.email
。filter-repo
是推荐的方法,因为它更快且更容易使用。以下是如何使用这两个工具的详细步骤:
使用 git filter-repo
首先,你需要确保安装了 git-filter-repo
。如果没有安装,可以通过以下命令安装:
1 | # For Ubuntu/Debian |
安装完成后,可以按照以下步骤操作:
备份你的仓库:这是一个破坏性操作,建议在开始之前备份你的仓库。
运行
git filter-repo
命令:1
2
3
4
5
6
7
8
9
10git filter-repo --name-callback '
if commit.committer.name == b"old_name":
commit.committer.name = b"new_name"
if commit.committer.email == b"old_email@example.com":
commit.committer.email = b"new_email@example.com"
if commit.author.name == b"old_name":
commit.author.name = b"new_name"
if commit.author.email == b"old_email@example.com":
commit.author.email = b"new_email@example.com"
'请将
old_name
和old_email@example.com
替换为你想要修改的原始名称和邮件地址,new_name
和new_email@example.com
替换为新的名称和邮件地址。
经尝试,该方法会出错,需要进一步研究
使用 git filter-branch
(不推荐)
虽然 git filter-branch
已被弃用,但你仍然可以通过以下步骤来修改提交历史:
备份你的仓库:这个过程也是破坏性的,先备份你的仓库。
运行
git filter-branch
命令:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16git filter-branch --env-filter '
OLD_EMAIL="old_email@example.com"
CORRECT_NAME="new_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@example.com
替换为你要修改的旧邮件地址,将new_name
和new_email@example.com
替换为新的名称和邮件地址。
推送更改到远程仓库
修改完成后,你需要强制推送到远程仓库:
1 | git push origin --force --all |
请注意,强制推送会覆盖远程仓库的历史,确保所有协作者都知道这次更改,并且在推送之前进行协调。
这些操作会重写 Git 历史,因此可能会影响到其他克隆了该仓库的协作者,请确保所有人都同意这次变更,并做好沟通工作。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 南岩 のBlog!