假设我有两个我正在研究的本地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上?
答案 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}
,但这没效果。