我已经在本地重新安装了一个已被推送的分支机构.
Git建议我的分支和远程分歧,并且:
"并分别有109和73个不同的提交"
推动我的分支会解决这个问题 - 也就是说,这是在一次变革后的预期吗?
Jas*_*run 123
当你重新分支一个分支时,你必须重新提交任何提交的提交,该提交位于你正在重新定位的分支中的提交之上.这是因为提交的一个属性是其父(或父).重新绑定时,您将更改分支上最旧的本地提交的父级 - 从而更改所有本地提交的提交哈希值,因为此更改会在传递过程中通过提交进行更新.
既然你已经推动了分支,你应该在源分支中合并,而不是对它进行重新定位.可以"强制推送"您的新分支(使用-f标志),但正常推送将不起作用,因为分支历史记录的完整性将受到干扰.如果你在这个分支上与其他人合作,强制推送是一个坏主意,因为当他们的历史突然不匹配时,它会导致其他合作者变得非常困惑.
TL; DR - 如果您没有合作,请使用push -f推送分支.如果是,请将分支重置为先前的状态,然后在源分支中合并.
mim*_*lea 39
你所有的提交都改变了ID,所以转移并不是真正的分歧.
要解决您的问题,您必须覆盖您的远程分支:
git push -f origin experiment
Run Code Online (Sandbox Code Playgroud)
http://git-scm.com/book/ch3-6.html
说明:
看看在这个图像中C3如何在rebase之后不被置为C3,而是作为C3'.这是因为它不完全是C3,但它具有所有代码更改.

在另一张图片中,您可以看到当涉及遥控器时看到什么样的底板,以及为什么会有转移.

在任何情况下,在你进行强制推送之后,它会告诉你它执行了(强制更新),那时你应该没问题.
检查顶部的链接,然后搜索"git push --force".您将看到更详细的解释.
通过执行以下操作,我成功地实现了 rebase diverge 的推送:
git checkout mybranch
git pull
git push origin mybranch
Run Code Online (Sandbox Code Playgroud)
拉动解决了分歧。
拉动之前
Run Code Online (Sandbox Code Playgroud)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 分支合并到 mybranch
我假设这可能是强制推动的作用,但我尚未验证。
正如其他人所说,如果您已经有开放的拉取请求,请避免重新设置基准。我提供这个例子是为了对我有用。
小智 6
通过将目标分支重新定位到当前本地分支,切换到目标分支,然后将本地分支重新定位到目标,可以在不强制推送的情况下修复此问题。这不会出现分歧,因为可能丢失的提交已被添加并且不再需要创建。更容易解释的示例:
如果您还没有更新您的开发分支,那么“git checkoutdevelopment”&&“git rebase feature/doing_stuff”将正常工作,因为自结帐以来没有添加任何提交。但是,如果您已经检查了开发并拉下了新的提交,那么如果您由于看到新的提交而尝试重新设置基准,您将看到这种分歧。无需强制推动的简单修复(在团队环境中通常不是一个好主意)是:
步骤 2 中的变基将缺少的提交引入到 feature/doing_stuff 中,因此当步骤 4 出现时,它是最新的,不需要为更改创建新的提交。
这是一个我知道有效的解决方案,因为我刚刚遇到了这个问题,并执行了上述步骤,成功地推动了开发,而无需强制。我在一个由 50 多名开发人员组成的团队中工作,因此禁止强制推送除我自己的测试分支之外的任何内容,因此我必须找到解决方案。
| 归档时间: |
|
| 查看次数: |
44700 次 |
| 最近记录: |