参考这个优秀的回答,我已经阅读并(我想)理解了,但是就我所看到的,它并没有回答我的具体问题(因为它解释了如何在不同分支上重新设置基础,但我想在同一分支上进行重新设置基础)。
情况
- 有两个分支,
master
和feature
,feature
在某个时间点上重新设置到master
之上 - 后来,由于某种原因*,我们希望
feature
从master
的先前某个提交中“分支出”
( * 编辑:原因,例如:本地feature
分支更改后,在将其重新设置到master
之后发生了故障,因此尝试找出在相似的方式下破坏了feature
分支的哪个提交在master
上使用git-bisect
)
问题:如何实现这一点?
示意图
如何从以下状态转换:
G--H--I--J <-- feature
/
A--B--C--D--E--F <-- master
你希望将什么改为这个?
G--H--I--J <-- feature
/
A--B--C--D--E--F <-- master
迄今为止的尝试
尝试1:
git checkout feature
git rebase C
结果:当前分支 bug/8985-miniredis 已经是最新的。
没有任何变化。
我认为这个结果很合理,因为对于Git来说,C
也是"当前分支"的一部分。(尽管从我的角度来看,"当前分支"只有G..J
)
尝试 #2:
git checkout feature
git rebase --onto C feature
结果:首先,将头倒回到其顶部以重播您的工作...
。然后feature
简单地指向C
,其他提交都“丢失”了。我真的不明白这里正在发生什么,但是再次强调,从我的角度来看,git不能知道feature
从F
“开始”。
第三次尝试:
git checkout feature
git rebase --onto C master..feature
结果:致命错误:无效的上游'master..feature'
如在该答案的评论中所述,这是不可能的,因为git
会自己插入..HEAD
部分。但肯定有一些方法可以实现这一点吧?
用其他话来表达这个问题:
如果git rebase --onto C master..feature
有效,如何实现它?
git-bisect
)。关于“您可以创建一个分支...并删除旧分支”:好吧,这也是正常变基操作的手动替代方法,不是吗?实际上,此答案的1.a似乎正是我需要的;我会尝试一下,如果是这种情况,那么这个问题就可以关闭了。 - Attilio