Rebase分支在其他分支上

时间:2014-11-12 17:44:27

标签: git rebase git-rebase

我遇到以下情况:

      develop
------o
       \
        \            master
---o-----o-----o-----o-----o-----o-----o
    \               /      A           B
     \             /
      o-----o-----o

在这里,我意外地在A之上开发了功能分支Bmaster,而不是develop BA开始分支)。此外,master实际上包含属于develop的更改(侧支,以及我的小ASCII艺术左侧的更多更改),并且是正确的它们在哪里。

如何修复此存储库,以便将AB重新定位到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的情况下也尝试了相同的操作,但是这导致了一个未更改的更改集,经过检查,结果是来自存储库的非常遥远的过去。跳过所有这些变更集然后导致一个额外的,完全破坏的分支。

1 个答案:

答案 0 :(得分:1)

使用git cherry-pick可以解决这个问题。你应该能够从主人那里挑选你想要的提交:

git checkout develop
git cherry-pick master..B

在此之后,AB的提交将复制到develop。剩下的就是重命名分支。