[英]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
结尾的新基础之上重放提交d
到h
。 请注意,我实际上会将生成的重新定位的 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'
重订后C
上A
,前者分支现在完全领先于后者的A
分支。 这意味着如果想要将C
合并回A
,您应该能够通过直接在A
之上应用提交d'
虽然f'
来快速前进A
分支。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.