Git:在合并第二个分支之后将第三个分支重新设置为第一个分支的更好方法

问题描述 投票:0回答:1

我有一个功能强大的分支,我们可以称其为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之前做点什么?

如果不清楚,请让我知道(我在这里不经常问问题!:))

git github rebase
1个回答
1
投票

根据您给出的确切的第一个分支图,您只需要将C分支重新建立在A分支上:

# from C branch
git rebase A

这将在A分支上以提交d结尾的新基础之上重播提交hc2。请注意,我实际上会这样绘制最终的基于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]。

© www.soinside.com 2019 - 2024. All rights reserved.