我刚刚完成了两个独立的开发分支,这些分支最初是从主分支分支出来的。以下是我用于分支Master Branch以创建这两个开发分支的流程:
Master
|--> DevelopBranch1
|
-->DevelopBranch2
最初我是通过DevelopBranch1
分支创建Master
的。然后我通过分支DevelopBranch2
创建了DevelopBranch1
。我做出此决定背后的原因是因为DevelopBranch2
取决于我在DevelopBranch1
中所做的新更改。
我完成了对DevelopBranch1
的更改。由于DevelopBranch2
最初并非Master
分支,我现在想做一些事情:
1)将DevelopBranch1
合并到Master
2)将DevelopBranch2
重新归结为Master
3)将DevelopBranch2
合并到Master
4)归档DevelopBranch1
我成功地将DevelopBranch1
合并到Master
,使用 SourceTree ,查看Master
并将其与来自{{1}的最新提交合并}。
当我进入第2步时,这就是我遇到问题的地方。我使用以下git命令来Reparent:
DevelopBranch1
在rebase命令之后,我注意到在 SourceTree 中,git checkout master
git rebase --onto DevelopBranch2
的最新提交已移至Master
内的最新提交。
此时,我尝试将DevelopBranch2
合并到Master
。使用此Merge并运行DevelopBranch2
后,我收到以下消息
git status
然后我跑了On branch master
Your branch and 'origin/master' have diverged,
and have 5 and 7 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
并收到了这条消息:
git pull
这是我目前陷入困境的地方。
非常感谢任何帮助!
答案 0 :(得分:2)
由错误使用的命令git rebase --onto DevelopBranch2
引起。让我们通过下面的图表来说明:
在step1(将DevelopBranch1
合并到Master
)之后,命令历史记录为:
...---A---B---C-------J Master
\ /
D---F---G DevelopBranch1
\
H--I DevelopBranch2
如果您使用git rebase --onto DevelopBranch2
命令,它会将当前分支Master
重置为DevelopBranch2
,如下所示:
...---A---B---C-------J
\ /
D---F---G DevelopBranch1
\
H--I DevelopBranch2, Master
对于您的情况,您应该使用 git rebase --onto Master DevelopBranch1 DevelopBranch2
。然后它会将DevelopBranch2
重新显示为Master
分支,就像您期望的那样。
首先,您应该将Master
分支重置为合并提交(提交合并DevelopBranch1
到Master
),然后再次执行step2的命令。使用的命令如下:
git checkout Master
git reset --hard <merged commit id>
git rebase --onto Master DevelopBranch1 DevelopBranch2
git push origin DevelopBranch2 -f
然后step2将正确执行(如下图所示)。您可以继续执行step3和step4。
H'---I' DevelopBranch2
/
...---A---B---C-------J Master
\ /
D---F---G DevelopBranch1