Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git在很久以前的团队回购中更改作者姓名/电子邮件_Git_Github - Fatal编程技术网

Git在很久以前的团队回购中更改作者姓名/电子邮件

Git在很久以前的团队回购中更改作者姓名/电子邮件,git,github,Git,Github,在我创建这个问题之前,我已经使用git filter branch export和git rebase阅读了答案,但它们都不适用于我的情况 所以我加入公司已经3个月了,我在回购协议上的第一个承诺是用计算机名和电子邮件(未知)/something@something)这是唯一一个有这个名字和电子邮件的承诺。现在,当我们在Jenkin设置新工作时,电子邮件开始给我们带来麻烦,它开始向该地址发送电子邮件,这会导致每个人都收到一封退回的电子邮件 我想更改我自己的姓名和电子邮件地址,这样我就可以消除这个问

在我创建这个问题之前,我已经使用
git filter branch export
git rebase
阅读了答案,但它们都不适用于我的情况

所以我加入公司已经3个月了,我在回购协议上的第一个承诺是用计算机名和电子邮件(未知)/something@something)这是唯一一个有这个名字和电子邮件的承诺。现在,当我们在Jenkin设置新工作时,电子邮件开始给我们带来麻烦,它开始向该地址发送电子邮件,这会导致每个人都收到一封退回的电子邮件

我想更改我自己的姓名和电子邮件地址,这样我就可以消除这个问题。然而,问题是:

  • 这是一个团队回购,我不能使用过滤分支重置所有电子邮件和名称
  • 那个提交现在是在头部后面的数千个提交,我不能手动重新设置基础
  • 在提交之后,主服务器上有一些活动的分支,它们还没有被合并
我真的在寻找一个解决方案,改变作者的姓名和电子邮件的只是具体的提交,也不会影响任何其他人。请帮忙。谢谢你,非常感谢

我已经用git filter branch export和git rebase阅读了答案,但没有一个适用于我的情况

实际上,我认为您最好的选择是在交互模式下执行
git-rebase
。如果有问题的提交发生在分支的当前
的1000次提交中,那么您应该键入:

git rebase -i HEAD~1000
您可以在提交之前编辑消息,然后继续重新设置基础。重基本身可能没有您想象的那么痛苦,因为您实际上并没有触及代码本身。事实上,其余的999个左右的提交应该完全没有冲突

我真的在寻找一个解决方案,改变作者的姓名和电子邮件的只是具体的提交,也不会影响任何其他人

不幸的是,你不能在不影响其他人的情况下做到这一点。通过更改相关提交的消息,您也在重写历史。这意味着您必须强制将分支推到远程。在这样做的过程中,您可能会放弃或惊讶于当前正在这个分支上工作的所有其他用途

因此,以下是我的建议:

  • 让团队在包含坏邮件提交的分支上提交所有工作(并且在您完成下一步之前,他们不得接触分支)
  • 然后,您可以拉动分支,执行交互式重基,并强制推送到远程
  • 然后团队的其他成员将删除该分支的本地副本(是的,您读对了)
  • 最后,团队将从远程服务器中提取已更正的分支
如果您遵循这些步骤,我相信您可以以最小的痛苦消除此电子邮件评论问题。

您不能

如果您更改了有关提交的任何内容,即使是单个字符或位,也会得到一个新的、不同的提交。如果有许多“下游”提交具有原始的“错误”提交(作为父母、祖父母、曾祖父母等),那么每个提交都需要复制到新的、不同的提交ID,因为每一个都列出了它的父ID,并且这些父ID将随着您在存储库中更新父ID而改变

这就是git声称的“强大的数据完整性”背后的含义:从那时起,如果不更改所有SHA-1,就无法更改历史,也就是说,将所有旧提交复制到新提交。这被认为是一项功能,当然,当您试图修复提交中的一些辅助数据(如拼写错误或用户名错误)时除外。:-)

您可以做的是,使用git的“notes”功能将附加的辅助数据附加到提交中,而无需修改提交本身,这可能有帮助,也可能没有帮助。notes的工作方式是,检查提交(如
git log
)的程序首先通过commit SHA-1 ID读取提交本身,然后将该ID用作键(部分),以查看是否有人希望对该注释进行其他注释。“其他东西”可以更改,即使SHA-1 ID不能更改


这种方法的问题是,您必须查看辅助数据。如果您使用的是
git log
,默认情况下,它将查找
core.notesRef
中列出的注释,这反过来又默认为
refs/notes/commits
。如果您正在使用其他内容,谁知道呢?

我认为您的解决方案是使用历史记录中的一个提交替换另一个提交

  • 在有问题的提交上创建分支

  • 修改提交(不确定它是否更改了作者。否则,您必须使用覆盖当前日期的技巧重新创建提交
    GIT\u提交者\u date=“2000-01-01T12:00:00”GIT提交--date==2000-01-01T12:00:00

  • 使用git replace将旧提交替换为新提交

  • 希望jenkins理解git替换。如果是这样,它就完成了(很快很容易)。这个解决方案的附加值就在这里

  • 如果没有,请使用git filter branch,但它会影响每个人的历史记录(就像其他建议的解决方案一样),其他开发人员会讨厌您(但此解决方案比纯rebase安全得多!)


  • 这是我刚才做的最后一个解决方案:

    • 让每个在该分支上工作的人提交并将他们的工作合并回该分支
    • 将最新提交的副本保存到本地计算机
    • 将分支回滚到我要更改信息的提交之前的提交
    • 硬拷贝本地副本并覆盖我刚刚回滚到的代码
    • 把它作为最新的承诺
    tha