我遇到了以下情况:
develop
------o
master
---o-----o-----o-----o-----o-----o-----o
/ A B
/
o-----o-----o
在这里,我意外地在master
的顶部开发了特征分支A
和B
,而不是develop
(B
从A
分支)。此外,master
实际上包含不属于develop
的更改(分支,以及我的小ASCII艺术左侧的更多更改),并且它们在哪里都是正确的。
如何修复此存储库,使A
和B
重新基于develop
?结果应该是这样的(虚线分支和虚线箭头表示重新基准操作):
develop
------o-----o-----o-----o <· · · ·
A B ·
·
---o-----o-----o-----o - - ◦ - - ◦ - - ◦
/master
/
o-----o-----o
我认为这是一个简单的rebase --onto develop master A
,但这导致了以下情况:
develop
------o-----o
A
(*)
---o-----o-----o-----o-----o-----o
/master B
/
o-----o-----o
其中(*)
是旧变更集A
,而A
现在是该变更集的副本。
我也在没有--onto
的情况下尝试过同样的操作,但这导致了未合并的变更集,经过检查,这些变更集来自存储库遥远的过去。跳过所有这些变更集会导致一个额外的、完全断开的分支。
这应该可以通过使用git cherry-pick
来解决。你应该能够从master中挑选出你想要的提交进行开发:
git checkout develop
git cherry-pick master..B
此后,A
和B
的提交被复制到develop
。剩下的就是重命名分支。