我在GitHub上创建了一个项目,其他人也参与其中。现在我意识到我已经在我的笔记本电脑上登录了错误的GitHub用户,我已经提交了这个存储库。
此时提交历史中还有其他人。作为存储库的所有者(来自我打算提交的实际用户),有什么方法可以将我的提交从一个用户“转移”到另一个用户,从“WRONG_USER”中删除所有内容,并将其添加到“RIGHT_USER” “不删除整个.git,并从头开始(因为其他贡献者提交将不得不保留)?
谢谢:)
答案 0 :(得分:1)
你有点腌渍。
提交不可变,作者信息在提交中。
这意味着您无法在不重写历史记录的情况下将提交移至其他作者。
如果您是“错误”电子邮件地址的所有者,则另一种解决方案是将该辅助电子邮件地址添加到您的GitHub帐户。
这不会改变提交的作者,但是在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:
如果没有必要使用WRONG_ACCOUNT,您可以删除该帐户。
在WRONG_ACCOUNT设置页面中 - >帐户 - >删除您的帐户。
然后,您可以将WRONG_EMAIL添加为RIGHT_ACCOUNT的辅助电子邮件地址。
您可以使用以下脚本将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存储库。