我遇到以下情况:
develop
------o
\
\ master
---o-----o-----o-----o-----o-----o-----o
\ / A B
\ /
o-----o-----o
在这里,我意外地在A
之上开发了功能分支B
和master
,而不是develop
B
从A
开始分支)。此外,master
实际上包含不属于develop
的更改(侧支,以及我的小ASCII艺术左侧的更多更改),并且是正确的它们在哪里。
如何修复此存储库,以便将A
和B
重新定位到develop
?结果应如下所示(虚线分支和虚线箭头表示rebase操作):
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
的情况下也尝试了相同的操作,但是这导致了一个未更改的更改集,经过检查,结果是来自存储库的非常遥远的过去。跳过所有这些变更集然后导致一个额外的,完全破坏的分支。
答案 0 :(得分:1)
使用git cherry-pick
可以解决这个问题。你应该能够从主人那里挑选你想要的提交:
git checkout develop
git cherry-pick master..B
在此之后,A
和B
的提交将复制到develop
。剩下的就是重命名分支。