在Git中重新拆分合并开发分支

时间:2013-09-02 18:28:30

标签: git

我将我的开发分支合并到我的主分支中,并从那时起进行了许多更改。如何从主分支重新拆分dev分支并保持更改。

master -------merged -------changes -- mstr & dev ------need to split  ----master
dev------------^                                             \------------- dev

2 个答案:

答案 0 :(得分:2)

如果您继续在dev分支和master上进行开发,则只需在dev之上重新定位master

首先,您将dev合并到master

x--x--x--x---X (master)
 \          /
  y--y--y--y (dev)

然后您在devmaster上进行了演变:

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或您喜欢的工具检查所有内容。