我将我的开发分支合并到我的主分支中,并从那时起进行了许多更改。如何从主分支重新拆分开发分支并维护更改。
master -------merged -------changes -- mstr & dev ------need to split ----master
dev------------^ \------------- dev
我将我的开发分支合并到我的主分支中,并从那时起进行了许多更改。如何从主分支重新拆分开发分支并维护更改。
master -------merged -------changes -- mstr & dev ------need to split ----master
dev------------^ \------------- dev
如果您继续在您的dev
分支上进行开发master
,您只需要dev
在以下基础上重新设置master
:
首先,您合并dev
到master
:
x--x--x--x---X (master)
\ /
y--y--y--y (dev)
然后你在dev
和上进行进化master
:
x--x--x--x---X--x--x (master)
\ /
y--y--y--y1--z--z (dev)
如何从主分支重新拆分开发分支并维护更改。
git checkout dev
git rebase --onto master y1 dev
您可以尝试git rebase -p
, 来保留合并提交,但在您的情况下,简单地重新设置您感兴趣的部分,即 ' z
' 提交,更简单。
x--x--x--x---X--x--x (master)
\ / \
y--y--y--y z'--z' (dev rebased)
根据您的描述,您希望(形象地)将您的“主”分支移回您进行合并之前的位置,并且您希望您当前的开发工作位于您的“开发”分支上。
如果我正确理解您的愿望,那本质上是两个分支指针的交换,并进行了调整以确保您没有指向合并提交本身。
在 master 上,用于git branch --move master new_develop
将 master 重命名为新名称。
然后假设你的旧开发分支指向那个旧的合并提交(检查这个gitk development
),用于git branch master development^2
重新创建 master 但在开发合并的第二个父级(注意交换的参数顺序)。
最后,git branch --move new_develop development
带回您的旧分支名称。gitk
使用或您最喜欢的工具检查所有内容。