2014-01-24 85 views
0

这可能已经或者可能还没有得到回答,但是由于我不知道准确的术语是用于我想要做什么的,因此很难通过搜索来找到它。Git rebase subbranches to other subbranch

这里是我当前的Git项目布局:

master 
    | 
    |-branch-a 
    |-branch-b 
    |-branch-c 


我已经意识到有些情况下的变化,我让所有三个支行都非常相似,他们应该对master顶部应用案例。但是,master是我的“导入分支”,我在将它合并到子分支之前从外部源导入更新的代码。

所以我认为要做到这一点的最好办法是建立一个支行关的master,说fixes,再有我的支行:

master 
    | 
    |-fixes 
     | 
     |-branch-a 
     |-branch-b 
     |-branch-c 

一旦我这样做,我就必须以某种方式排解在fixes分支中固定任何代码的现有分支。但我认为最困难的部分是将我的分支重新分配到fixes分支,而不会搞乱我的回购。

值得注意的是,每个子分支都包含需要独立于其他分支的代码。基本上在不同的想法上并行发展。一个或多个可能会稍后在道路上合并回master。假设,如果我没有适用于所有子分支的修正,那么fixes基本上只是master的一面镜子。

我该如何去做这件事?



编辑:因为我不能评论得出ASCII,这是为了应对user3236304的答案。

我想我明白你的意思了。我应该代替使我的树枝像这样?:

master (core fixes go here) 
    | 
    |-upstream 
    | 
    |-branch-a 
    |-branch-b 
    |-branch-c 

这样,我能将我自己的本地核心修复到master和使用upstream分支跟踪从上游的变化,它们融入我的本地分支机构需要的?

回答

1

我会做这个略有不同; master是您的常见集成工作分支 - {a,b,c}是特定的发布分支,并且您维护从上游导入的特定“上游”分支。

获得的收益是,你有一个特定的区域来持续地将变化折叠成新的版本 - 期望每个分支{a,b,c}可能是(派生的)(最接近)那个共同的分支点。

关于管理共同分支,从它的声音你偶尔会合并/樱桃选择;这工作得很好,而且这样的结构使得偶尔做一个共同的变形来消除噪声/死CL,从实际的上游最小化历史三角。

无论采用何种方法,我建议您退后一步,尝试确定您的工作是否为真正的“主人”(他们会从您那里拉出来),或者如果您是一些其他上游。如果你是一个衍生工具,我所描述的工作相当出色;如果你是'大师',那么你可能会想要不同的东西。

+0

看到我的编辑到我上面的原始问题,回应你的建议答案。 – Kumba

+0

假设你不是上游 - 这是类似于内核的东西 - 你需要下列分支关系,就什么是'起源':上游 - >主,主 - >分支 - {a,b ,C} 。通过这一点,你有一个自然的变化流程; master从上游分支出来,每个分支都从master中分出,并根据需要折叠变更。 – ferringb