我将我的开发分支合并到我的主分支中,并从那时起进行了许多更改。如何从主分支重新拆分dev分支并保持更改。
master -------merged -------changes -- mstr & dev ------need to split ----master
dev------------^ \------------- dev
答案 0 :(得分:2)
如果您继续在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)
如何从主分支重新拆分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)
答案 1 :(得分:0)
根据您的描述,您希望(比喻性地)将您的“主”分支移回到合并之前的那一点,并且您希望当前的开发工作在您的“开发”分支上。
如果我理解你的愿望,那本质上是两个分支指针的交换,通过调整来确保你没有指向合并提交本身。
在master上,使用git branch --move master new_develop
将master重命名为新名称。
然后假设您的旧开发分支指向旧的合并提交(检查此gitk development
),使用git branch master development^2
重新创建master但在开发合并的第二个父级(请注意交换的参数顺序)。
最后,git branch --move new_develop development
带回旧分支名称。使用gitk
或您喜欢的工具检查所有内容。