在过去的其他分支上重新分配分支



我遇到了以下情况:

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

在这里,我意外地在master的顶部开发了特征分支AB,而不是developBA分支)。此外,master实际上包含属于develop的更改(分支,以及我的小ASCII艺术左侧的更多更改),并且它们在哪里都是正确的。

如何修复此存储库,使AB重新基于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

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

最新更新