【问题标题】:Changing lots of git commit messages更改大量 git 提交消息
【发布时间】:2011-05-02 22:53:44
【问题描述】:

显然,我很久以前在设置 git 时打错了我的电子邮件,因此我的电子邮件在许多存储库中都不正确(我输入了 0 而不是 o)。我签署了我所有的提交,所以多年来几乎每个 repo 中的每个提交都说signed off by: <xxx0@foo.bar> 而不是signed off by: <xxxo@foo.bar>。现在我不能只切换我的电子邮件,所以我想切换这些提交消息。

我已经完成了git config --global user.email "xxxo@foo.bar",所以这不应该成为未来的问题。

首先,是否有可能在不把事情搞砸的情况下大规模地更改消息?我已经将这些更改推送到多台服务器,其他人已经撤消了这些更改。

其次,有没有一种方法可以让我在脚本中快速做到这一点?即:

foreach(commit in log)
{
    change "<xxx0@foo.bar>" to "<xxxo@foo.bar>"
}

感谢所有帮助,谢谢!

【问题讨论】:

  • 问题真的那么大吗?有多少人拥有您的代码但不知道如何联系您?如果它是一个开源项目,您可能更喜欢通过项目网站进行交流。如果它是一个商业项目,完全陌生的人可以访问您的代码并且无法与您联系,那么您可能已经失去了工作。
  • 我会说这是一个相当大的问题。很多项目都是仅存在于 github 上的小型开源项目。其中一些只是我从事过的工作,因此一种不适用于更大项目的方法可能在那里还可以,但其中一些有多个贡献者并且已经退出多年。如果我不觉得这是个大问题,我会花时间把这些都写出来吗?

标签: git commit commit-message


【解决方案1】:

如果变更集已经公开并且其他人已经撤消了它们,那么您不应该触摸它们。修改它们会改变它们的 SHA,这会在很大程度上给其他人搞砸(参见git rebase 页面上的“从上游 Rebase 恢复”部分)。

既然我已经提到了这一点,假设它们还没有被公开。如果是这种情况,您想用来修改它们的工具将是git filter-branch

【讨论】:

  • 那我该怎么办?我有一堆提交指向不是我的电子邮件(并且已经注册,请注意)。
  • 嗯,这里没有一个很好的解决方案。一般来说,我会说只是让人们知道错误,然后保持原样。
  • 假设只有一台服务器存储数据,在服务器端对存储库进行核攻击并重新开始(并要求每个人对他们的副本做同样的事情)将是微不足道的——这会完成吗同样的任务?
  • 好吧,如果nuke和重新启动很简单,你可以使用git filter-branch,强制推送到服务器,然后要求所有人重新克隆;他们只需要确保没有留下任何本地工作(因为它不会转移到新的克隆)。
  • 一如既往:你在这里所做的是重写历史。就像在现实世界中一样,改写历史需要一个阴谋才能起作用。所以,如果你可以完全控制每一个曾经从你身上拉扯过的人,以及曾经从从你身边拉扯过的人身上拉过的所有人,以及曾经从曾经从从你身边拉过的人那里拉扯过的所有人,等等,那么(并且只有那么)你可以改变历史。
猜你喜欢
  • 1970-01-01
  • 2021-02-06
  • 2017-11-01
  • 2013-01-01
  • 2010-12-25
  • 2011-06-29
  • 2016-04-23
  • 2017-07-04
  • 2011-07-09
相关资源
最近更新 更多