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
如何在Github上将所有提交更改为其他提交?_Git_Github_Version Control - Fatal编程技术网

如何在Github上将所有提交更改为其他提交?

如何在Github上将所有提交更改为其他提交?,git,github,version-control,Git,Github,Version Control,我在GitHub上创建了一个项目,其他人对此做出了贡献。现在我意识到我在笔记本电脑上登录到了错误的GitHub用户,我从那里提交到这个存储库 在这一点上,提交历史中还有其他人。作为存储库的所有者(从我打算提交的实际用户),我是否有任何方法可以将我的提交从一个用户“转移”到另一个用户,从“错误的用户”中删除所有内容,并将其添加到“正确的用户”中,而不删除整个.git,从头开始(因为其他出资人必须留下来) 谢谢:)你有点为难了 提交是不可变的,提交上有作者信息 这意味着您不能在不重写历史的情况下将提

我在GitHub上创建了一个项目,其他人对此做出了贡献。现在我意识到我在笔记本电脑上登录到了错误的GitHub用户,我从那里提交到这个存储库

在这一点上,提交历史中还有其他人。作为存储库的所有者(从我打算提交的实际用户),我是否有任何方法可以将我的提交从一个用户“转移”到另一个用户,从“错误的用户”中删除所有内容,并将其添加到“正确的用户”中,而不删除整个.git,从头开始(因为其他出资人必须留下来)


谢谢:)

你有点为难了

提交是不可变的,提交上有作者信息

这意味着您不能在不重写历史的情况下将提交移动到其他作者

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

这可以在这张图中看到:


这不会改变提交的作者,但会在GitHubs界面中显示为作者。

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

如果您重写历史记录,那么其他所有用户的存储库都将被破坏。不是“坏得无法修复”,但还是坏了。他们必须采取措施解决这些问题;如果你想让他们以“正确的方式”修复它们——也就是说,在不破坏你的历史重写的情况下——那么你需要提前让他们知道正在发生什么以及他们需要做什么

如果这看起来还可以,并且值得为你所得到的付出代价,那么这是可以做到的。我会继续指出,如果我是你的项目的一个贡献者,我不会高兴这个决定强加在我身上,我额外的努力是“值得的”,以纠正一个不属于我的美学问题

下面的
git-rebase
docs中描述了用户将发现自己的情况。所以我先看一下。在重写整个存储库历史记录时,我的一般建议是让每个人都将其所有代码推送到源代码,并放弃其克隆,然后进行重写,然后让每个人重新克隆;因为在重写后修复旧克隆可能是一件非常麻烦的事


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

您不能将错误的电子邮件添加为正确帐户的辅助电子邮件,因为您已经使用了错误的电子邮件创建了另一个github帐户(我们在这里称之为错误的帐户)

有几种方法可以将提交从错误的用户更改为正确的用户:

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
选项1:删除错误的\u帐户 如果没有必要使用错误的帐户,您可以删除该帐户

在错误的帐户设置页面->帐户->删除您的帐户

然后,您可以将错误的\u电子邮件添加为正确\u帐户的辅助电子邮件地址

选项2:重写提交历史记录 您可以使用以下脚本将错误的\u用户更改为正确的\u用户:

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 repo,从而更改相应分支的历史记录。在大多数情况下,这是不必要的,我建议你澄清一下这是否可以,这样就可以了。其中一个在哪里这样做?当另一个Github用户已经使用另一封电子邮件时,如何将另一封电子邮件添加为辅助地址的可能副本?它将抛出一个错误。是的,这不太可能成功。正如我所说的,你陷入了困境。没有好的解决方案:)选项1是可能的;再过一周我就不需要这个账户了。所以我会删除它,并将电子邮件转移到我的主帐户。非常感谢。