【问题标题】:How can I add my email/username to old commits without any email/username?如何在没有任何电子邮件/用户名的情况下将我的电子邮件/用户名添加到旧提交?
【发布时间】:2020-04-02 03:15:58
【问题描述】:

我目前在 SWE 课程中,我们都在一个 Github 存储库中处理一个项目。

我们的评分主要来自通过我们提交到存储库的脚本,但不幸的是,我没有意识到我没有在我的终端中为 Git 配置我的电子邮件和用户名,因此我的所有代码推送到我们的存储库与我的 Github 帐户无关。

教授有一个脚本,可以分析这些提交并根据脚本输出的内容分配等级,但由于我没有在终端中配置我的电子邮件/用户名,这个脚本不会捕获我的提交。

有什么办法可以解决这个问题吗?
我找到了this 文章,但我认为该脚本不会起作用,因为没有与这些提交相关的电子邮件。提前致谢。

【问题讨论】:

  • Git 需要配置某种名称和电子邮件,否则它不会让您提交。所以我的猜测是,您的提交与您的 GitHub 帐户不同的电子邮件地址相关联。如果您执行git show <commit> 其中<commit> 是您编写的提交的ID(SHA1),它会在输出中显示什么电子邮件?如果您可以将该电子邮件添加到您的 GitHub 帐户,它将使用您的用户名显示提交,这可能会解决问题。
  • 这已解决,非常感谢!
  • 很高兴听到! :)

标签: git github


【解决方案1】:

如果每个人都推送到同一个分支,这将是一个问题,因为使用正确的用户名/电子邮件重写您的本地历史记录将暗示 git push --force,这意味着这将更改远程存储库端提交的 SHA1。

但是,如果您在单独的分支中推送,除了提醒教授并确保脚本会考虑您新编写的分支之外,您可以强制推送而不会产生太大后果。

检查是否真的没有与您的last commit with 关联的电子邮件:

git log --format='%ae' HEAD

OP ddipi确认in the comments

我使用git log --format='%ae' HEAD 命令发现我实际上使用的是我的旧电子邮件地址。
我把它添加到我的 Github 帐户中,问题就解决了。


为了在提交时重置用户/电子邮件,我建议这几天使用新工具 git filter-reporeplaces BFG and git filter-branch
查看其user manual

要修改提交的用户名和电子邮件,您可以创建git-shortlog 接受的格式的邮件映射文件。
例如,如果您有一个名为 my-mailmap 的文件,您可以运行

git filter-repo --mailmap my-mailmap

如果该文件的当前内容如下(如果指定的邮件映射文件受版本控制,则忽略该文件的历史版本):

Correct Name <correct@email.com> <old@email.com>

然后我们可以根据指定的映射更新用户名和/或电子邮件。

请参阅git shortlog "mapping author" section 了解邮件映射文件的确切语法。

或者,callbacks:

git-filter-repo --name-callback 'return name.replace(b"OldName", b"NewName")' \
   --email-callback 'return email.replace(b"old@email.com", b"new@email.com")'

【讨论】:

  • 我使用git log --format='%ae' HEAD 命令发现我实际上在使用我的旧电子邮件地址。我把它添加到我的 Github 帐户中,问题就解决了。谢谢!
  • @ddipi 太棒了!我已将您的评论包含在答案中以提高知名度。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2015-06-29
  • 2014-09-13
  • 2011-05-25
  • 1970-01-01
  • 2014-03-17
相关资源
最近更新 更多