我有一个功能强大的分支,我们可以称其为A,并且我从A的最后一次提交创建了一个分支B。
一段时间后,我在Github中创建了一个Pull Request来将B合并到A。但是由于我不想等待,所以我在合并之前从B创建了分支C。
[A] a---b---c---c1---c2
\(A)
[B] d---e---f
\(B)
[C] g---h
我承诺使用C,同时分支B已合并到A。所以我想清理工作并通过从源中拉出它来更新本地A,这样我就可以遇到这种情况:
[A] a---b---c---c1---c2---d---e---f
\(A)
[C] g---h
现在,这是我的问题:我希望将C重新基于A,但是由于B已被合并和删除(甚至是在本地,因为我拉了),所以要对其重新设置基础,我不能做类似的事情:
git rebase B C --onto A
但是B不再存在,所以当我git log时,这基本上就是我所拥有的:
[A]a---b---c---c1---c2
[C] d'---e'---f'---g---h
(This is what I have to do in order to rebase)
git rebase f' C --onto A
这可行,但是我需要验证BI可以从C猜到的最后一次提交的哈希(这里是f'),在这里我可能会犯错误(而且看起来很丑,就像所有提交都来自B一直打开)。
在合并B之后,是否有更好的方法将C重新基于A?也许我必须在拉A之前做点什么?
如果不清楚,请让我知道(我在这里不经常问问题!:))
根据您给出的确切的第一个分支图,您只需要将C分支重新建立在A分支上:
# from C branch
git rebase A
这将在A分支上以提交d
结尾的新基础之上重播提交h
至c2
。请注意,我实际上会这样绘制最终的基于C的分支:
C: a -- b -- c -- c1 -- c2 -- d' -- e' -- f' -- g' -- h'
撇号(即d'
而不是d
)表示d'
至h'
的提交实际上已经rewrite。请注意,在重新设置基准期间重播提交意味着再次提交提交,并且实际上是新提交。
关于要将重新建立基础的C
合并回A
时会发生什么,让我们以这种方式绘制图表:
A: a -- b -- c -- c1 -- c2
\
C: d' -- e' -- f' -- g' -- h'
在将C
重置为A
之后,前一个分支现在完全在后者A
分支之前。这意味着,如果想将C
合并回A
,则只需通过A
到[[ C0]。