繁体   English   中英

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

[英]Git: Better way to rebase 3rd branch onto 1st branch after 2nd branch merged

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

如果这还不够清楚,请告诉我(我不经常在这里提问!:))

根据您提供的确切第一个分支图,您应该只需要在 A 分支上重新设置 C 分支:

# from C branch
git rebase A

这将在 A 分支上以提交c2结尾的新基础之上重放提交dh 请注意,我实际上会将生成的重新定位的 C 分支绘制如下:

C: a -- b -- c -- c1 -- c2 -- d' -- e' -- f' -- g' -- h'

主要标记(即d'而不是d )表示提交d'h'实际上已被重写 请注意,在 rebase 期间重放提交意味着再次提交,并且实际上是新提交。

关于当您想将重新调整的C合并回A时会发生什么,让我们以这种方式绘制图表:

A: a -- b -- c -- c1 -- c2
                          \
C:                         d' -- e' -- f' -- g' -- h'

重订后CA ,前者分支现在完全领先于后者的A分支。 这意味着如果想要将C合并回A ,您应该能够通过直接在A之上应用提交d'虽然f'快速前进A分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM