自动管理依赖于另一个本地分支的git分支?

时间:2013-12-29 23:50:28

标签: git version-control rebase

假设我有两个我正在研究的本地git分支。

分支1从“主”分支出来,分支2从分支1分支出来(取决于它)。

两者都在进行中,我还没准备好推动其中任何一个。

在分支2上工作时,我看到了我要做的更改,所以我切换回分支1并稍微重构一下,添加一个新的提交。

现在我想回到第2分支并重新定位它。

如果我运行git rebase branch_1 branch_2,我会遇到大量冲突,因为branch_2的历史记录当前包括重构之前的旧branch_1提交,以及branch_1中的新重构冲突。

我们暂时假设没有实际的冲突。如果我要创建一个新的分支2b,并按顺序挑选分支2的所有提交,那么它们就会完全修补。

有没有一种简单的方法可以将branch_2特有的所有提交重新绑定到新的branch_1上?

2 个答案:

答案 0 :(得分:1)

您对branch2的提交基于未经实现的提交,然后更改未经重构的代码。现在,您尝试在重构的提交上重新定义这些更改,但您的更改仍会尝试更改重构代码中不再包含的未经重构的代码行。 - 抱歉,这种变种是不可能的。


让我们看看我是否做对了。这是你的出发情况:

  master     branch_1     branch_2
    ↓           ↓           ↓
o---o---o---o---x---a---b---c

您添加了重构:

              branch_1
                  ↓           
  master          r       branch_2
    ↓            /          ↓
o---o---o---o---x---a---b---c

现在你的rebase应该这样做:

              branch_1    branch_2
                  ↓           ↓
  master          r---a---b---c
    ↓            / 
o---o---o---o---x

但提交a正在更改x中不再包含的r行。因此,在没有冲突的情况下,rebase不应该工作。

即使你创建一个新的分支r并尝试挑选a,你也应该遇到完全相同的问题。 - 如果我理解完全错误的话,请澄清你的问题。

答案 1 :(得分:0)

好的,如果我知道branch_2从branch_1分歧后有3次提交,我可以这样做:

git rebase --onto branch_1 branch_2^^^ branch_2

这合理吗?有没有一种速记方式我可以指定branch_2发散的点?我试过了branch_2@{u},但这没效果。