如何在Github上将所有提交更改为另一个?

4
我在 GitHub 上创建了一个项目,其他人也对该项目做出了贡献。现在我意识到我在提交到此存储库的电脑上登录了错误的 GitHub 用户。
此时提交历史中还有其他人的记录。作为存储库的所有者(来自实际我打算提交的用户),有没有办法“转移”我的提交记录,将“WRONG_USER”中的所有内容删除,并添加到“RIGHT_USER”,而不必删除整个 .git 并从头开始(因为其他贡献者的提交记录必须保留)?
谢谢 :)

更改提交的详细信息(如用户、邮件地址等)会更改相应分支的历史记录。在大多数情况下,这是不可取的,我建议您先澄清是否可以这样做。 - C-Otto
可以的。在哪里做呢? - cbll
可能是更改特定提交的提交作者的重复问题。 - phd
3个回答

3

由于您已经使用WRONG_EMAIL创建了另一个GitHub帐户(我们在这里称其为WRONG_ACCOUNT),因此无法将WRONG_EMAIL添加为RIGHT_ACCOUNT的辅助电子邮件。

有几种方法可以将提交从WRONG_USER更改为RIGHT_USER:

选项1:删除WRONG_ACCOUNT

如果不需要使用WRONG_ACCOUNT,可以删除该帐户。

在WRONG_ACCOUNT设置页面 -> 帐户 -> 删除您的帐户。

enter image description here

然后您可以将WRONG_EMAIL添加为RIGHT_ACCOUNT的辅助电子邮件地址。

选项2:重写提交历史记录

您可以使用以下脚本将WRONG_USER更改为RIGHT_USER:

git filter-branch --commit-filter '
        if [ "$GIT_AUTHOR_EMAIL" = "WRONG_EMAIL" ];
        then
                GIT_AUTHOR_NAME="RIGHT_USERNAME";
                GIT_AUTHOR_EMAIL="RIGHT_EMAIL";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

然后,您可以通过 git push -f --all 强制推送更改到您的 GitHub 仓库。


选项1是一个可能性;一周后我将不再需要这个账户。因此,我会删除它,并将电子邮件转移到我的主要账户。谢谢! - cbll

3

你有点麻烦了。

提交是不可变的,作者信息在提交中。

这意味着,如果没有重新编写历史记录,您无法将提交移动到不同的作者名下。

如果您拥有“错误”的电子邮件地址,另一种解决方法是将该辅助电子邮件地址添加到您的GitHub帐户中。

可以在此图像中看到: Multiple Emails on one account

这不会更改提交的作者,但在GitHub界面中,您将显示为作者。


当另一个Github用户已经使用了该电子邮件地址时,我如何将其添加为辅助地址?这将会引发错误。 - cbll
是的,那很可能不会成功。就像你所说,你陷入了困境。没有好的解决方案 :) - RandomSort

1

嗯,有人问你是否可以重写历史记录(但没有解释后果),你回答说可以(尽管我怀疑你是否理解后果),所以让我们澄清一下。

如果你重写历史记录,那么每个其他用户的存储库都会出现问题。不是“无法修复”,但仍然有问题。他们将不得不采取措施来修复它们;如果你希望他们“正确地”修复它们——也就是说,不撤消你的历史记录重写——那么你需要事先告诉他们发生了什么以及他们需要做什么。

如果这仍然看起来可以,并且值得为了你获得的东西而麻烦,那么可以这样做。我想指出的是,如果我是你项目的贡献者,我不会高兴被强制做出决定,我要付出额外的努力去纠正一个不是我造成的美学问题。

您的用户可能会遇到的情况在git rebase文档下从上游rebase中恢复中有描述。因此,我建议先查看这个文档。当重写整个存储库历史记录时,我的一般建议是让每个人将他们的所有代码推送到origin并且放弃他们的克隆,然后进行重写,最后让每个人重新克隆;因为在重写之后修复旧的克隆很可能会是一个严重的麻烦。

如果最终您还是决定要重写,您需要使用git filter-branch--env-filter参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接