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

标签 git github commit rebase

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

最佳答案

因此,如果不需要或在任何地方都没有引用原始哈希值,并且只需要更新作者姓名/电子邮件,则有两个简单的步骤可以做到这一点。

Be aware that it's not reversible, so make sure to have a backup.

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

跳过 --global 进行存储库特定的用户名/电子邮件配置。

  • 在存储库所需的分支上运行此单行代码:
  • 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
    

    再次,首先在存储库的副本上尝试这些步骤!

    关于git - 更改 Git/GitHub 存储库的作者姓名和电子邮件,保留所有提交的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65578291/

    相关文章:

    c++ - 在C++/Eclipse中编译Tensorflow时遇到问题

    git - 推送到远程 Git 存储库时出错

    git - 如何检查 git merge 问题是否已修复?

    git - 这超出了 GitHub 的文件大小限制

    svn - 在 Unix 机器上具有相同登录凭据的多个 SVN 用户

    lucene - 选择 solr/lucene 提交策略

    python - 使用 Cloud Source 存储库设置 Google Cloud Function 时出现 ModuleNotFoundError

    Git如何给人们推送需要由组织者 merge 的访问权限?

    git - 在 GitHub 中,更新一个分支以匹配另一个分支

    git - 如何自动生成提交信息