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

时间:2018-01-22 13:45:34

标签: git github version-control

我在GitHub上创建了一个项目,其他人也参与其中。现在我意识到我已经在我的笔记本电脑上登录了错误的GitHub用户,我已经提交了这个存储库。

此时提交历史中还有其他人。作为存储库的所有者(来自我打算提交的实际用户),有什么方法可以将我的提交从一个用户“转移”到另一个用户,从“WRONG_USER”中删除所有内容,并将其添加到“RIGHT_USER” “不删除整个.git,并从头开始(因为其他贡献者提交将不得不保留)?

谢谢:)

3 个答案:

答案 0 :(得分:1)

你有点腌渍。

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

这意味着您无法在不重写历史记录的情况下将提交移至其他作者。

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

这可以在这张图片中看到: Multiple Emails on one account

这不会改变提交的作者,但是在GitHubs界面中会让你出现作者。

答案 1 :(得分:1)

好吧,有人问你重写历史是否合适(但没有解释后果),你回答说它没问题(虽然我怀疑你理解后果),所以让我们澄清一下

如果您重写历史记录,那么每个其他用户的存储库都将被破坏。不是"打破了无法修复",但仍然打破了。他们必须采取措施来解决它们;如果你想让他们解决问题"正确的方式" - 也就是说,在不撤消历史记录重写的情况下 - 那么您需要提前告知他们发生了什么以及他们需要做什么。

如果这似乎仍然可以,并且值得为你获得的东西带来麻烦,那么就可以做到。我会继续指出,如果我是你项目的贡献者,我不会很高兴决定强迫我,我的额外努力是值得的#34;纠正一个不属于我的美学问题。

Recovering from Upstream Rebase下的git rebase文档中描述了用户发现自己的情况。所以我从那看起来开始。当重写整个存储库历史时,我的一般建议是让每个人将所有代码都推送到源并丢弃他们的克隆,然后进行重写,然后让每个人重新克隆;因为在重写之后修复一个旧的克隆可能是一个严重的麻烦。

最后,如果您决定进行重写,则可以将git filter-branch--env-filter参数一起使用。

答案 2 :(得分:1)

您无法将WRONG_EMAIL添加为RIGHT_ACCOUNT的辅助电子邮件,因为您已经使用了WRONG_EMAIL创建了另一个github帐户(我们在这里称之为WRONG_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存储库。