更改分支的父级

时间:2013-01-04 18:02:21

标签: git git-branch branching-and-merging

现在一直在寻找解决方案,因为我离git专家很远 - 即使我接近解决方案,我也无法稍微修改它以完成它。

我一直在尝试像这里建议的那样工作:http://nvie.com/posts/a-successful-git-branching-model/,但是由于匆忙以及什么时候没有为修补程序分支 - 我从dev而不是master分支。

简体,我们可以说有以下历史记录:

A---B---C--------D---- < developer
\      / \      /
 R1--R2   H1---H2
       \         \
--------X---------Y--- < master

R1和R2是相对分支提交,并且没问题。但是,H1和H2是修补程序分支提交,H1应该具有来自X(主)的分支,而不是C(dev)。由于X和C提交后面都有相同的代码,是否可以从X中获得H1分支?

我希望看起来像这样:

A---B---C--------D---- < developer
\      /        /
 R1--R2   H1---H2
       \  /      \
--------X---------Y--- < master

这根本不会改变代码,我只是想保持一致,并且在他们应该的地方开始分支。事情是 - 以后在开发和主分支上都会有更多的提交。 H1-H2分支基本上超过一个月,稍后提交了超过一百个。

正如我所指出的那样,我是一个初学者,并且一直在玩rebase而不是什么,但结果却非常糟糕。

有什么办法治愈吗?

1 个答案:

答案 0 :(得分:2)

如果不重写H1,你就不能这样做,然后重写H2,这也意味着重写D和Y.所以所有的提交都需要改变和重新发布。重新发布已发布的提交通常是一个坏主意。所以,如果这不是一个太大的问题,你就不应该这样做,只是保持原样。

如果您仍想这样做,可以按照以下步骤进行:

  • 基于X创建一个新的(临时)分支。
  • Cherry pick H1;结果H1'现在基于X。
  • Cherry pick H2。
  • 将主人重置为X(git reset --hard X)。
  • 将临时分支合并为主分支。
  • 删除临时分支。
  • 将开发人员重置为C.
  • 将master合并为开发人员。
  • 使用强制选项发布两个分支。