更改 Git/GitHub 存储库的作者姓名和电子邮件,为所有提交保留时间戳

问题描述

我最近在 GitHub 上更改了我的用户名,另外我想从提交中隐藏我的真实电子邮件并保留提交历史。假设我没有任何贡献者,所以所有提交都是我的。找到了一些使用 git filter-branch 的建议,但运行它时我收到警告,它可能会损坏我的存储库。有没有其他选择?

解决方法

因此,如果不需要或未在任何地方引用原始哈希值,而只需要更新作者姓名/电子邮件,则只需两个简单的步骤即可。

请注意,它不可逆,因此请务必备份。

  1. 将新名称和电子邮件设置为 git 配置:
git config --global user.name "FIRST_NAME LAST_NAME"
git config --global user.email "MY_EMAIL@SOME_DOMAIN.com"

跳过 --global 以获取特定于存储库的用户名/电子邮件配置。

  1. 在存储库的所需分支上运行此单行:
git rebase -i --rebase-merges --root --exec 'GIT_COMMITTER_DATE="$(git log -n 1 --format=%aD)" git commit --amend --reset-author --no-edit --date="$(git log -n 1 --format=%aD)"'

编辑器将打开所有提交的列表和将在每次提交时执行的命令。这里什么都不用做,保存退出即可。 之后将应用更改。

所以它基本上所做的就是从有史以来的第一次提交开始以交互模式运行 re-base。对于每次提交,它获取原始提交的日期,设置 GIT_COMMITTER_DATE(对 GitHub 很重要)和时间戳(将显示在 git log 中),重置提交的任何作者,并修改变化。然后进入下一次提交。就是这样,现在您只需要强制推送更改以更新 GitHub 存储库。

git push -f

同样,请先在存储库的副本上尝试这些步骤!