Answers:
在为分支重新设置基础时,必须为要重新定基础的分支中的提交之上的任何提交重写提交。这是因为提交的属性之一是其父级(或多个父级)。重新设定基准时,您将更改分支上最旧的本地提交的父级-并因此更改所有本地提交的提交哈希,因为此更改会在传递过程中不断冒泡。
由于您已经推送了分支,因此您应该已经合并到源分支中,而不是根据它进行基础调整。可以“强制推送”新分支(使用该-f标志),但是正常的推送将不起作用,因为分支历史记录的完整性会受到干扰。如果您正在与这个分支上的其他人协作,那么强行推销是个坏主意,因为当其他协作者的历史突然不匹配时,这将使其他协作者变得非常困惑。
TL; DR-如果不进行协作,请使用push -f推送分支。如果是这样,请将分支重置为先前的状态,然后合并到源分支中。
您的所有提交都更改了id,因此转移并不是真正的分歧。
为了解决您的问题,您必须覆盖您的远程分支:
git push -f origin experiment
http://git-scm.com/book/ch3-6.html
说明:
看到在此图像中,如何将C3放到重定基准之后而不是C3上,而是放到C3'上。这是因为它不完全是C3,但是它具有所有代码更改。

在另一幅图像上,您可以看到当涉及到远程控制器时看到的基准变迁以及为何发生转移的情况。

无论如何,在执行强制推送之后,它将告诉您它进行了(强制更新),此时您应该可以。
检出顶部的链接,然后搜索“ git push --force”。您将看到更详细的说明。
通过执行以下操作,我成功地推动了rebase的分歧:
git checkout mybranch
git pull
git push origin mybranch
拉动解决了分歧。
拉之前
Your branch and 'origin/mybranch' have diverged, and have 2 and 1 different commit(s) each, respectively.
拉输出
递归合并。mypath / myfile.py | 12 +++++++++++-1个文件已更改,11个插入(+),1个删除(-)
拉后
您的分支比“ origin / mybranch”提前3次提交。
推后
mybranch在分支之前3,仍然有一个打开请求请求合并消息添加到提交历史记录中,将分支的mybranch合并到remote
我以为这可能是推力所做的,我尚未验证。
正如其他人所说,如果您已经有一个开放的拉取请求,请避免重新设置基准。我提供此示例是对我有用的东西。
可以通过以下方法解决此问题:将目标分支重新部署到当前本地分支,切换到目标分支,然后将本地分支重新部署到目标,而无需强制执行。这不会发散,因为添加了可能丢失的提交,并且不再需要创建。为了更容易解释的示例:
如果尚未更新您的develop分支,则“ git checkout开发”和&“ git rebase功能/ doing_stuff”将正常工作,因为自从签出以来未添加任何提交。但是,如果您签出了development并撤消了新的提交,那么由于尝试看到新的提交而尝试进行基础调整时,您将看到这种差异。一个简单的解决方法,而无需用力推动(在团队环境中通常不是一个好主意)是:
步骤2的重新设置将缺少的提交提交到feature / doing_stuff中,因此当步骤4进行时,它是最新的,不需要为更改创建新的提交。
我知道这是一个可行的解决方案,因为我只是碰到了这个问题,并且执行了上述步骤以成功推动开发而无需强迫。我的团队由50多个开发人员组成,因此除我自己的测试分支外,禁止强加任何其他操作,因此我必须找到解决方法。