git rebase的三元形式
假设有一个分支topica在某个点上与master分离:
A--B--C--D--E主机
F--G--H topicA
假设还有其他人从topica分支创建了topicb,并添加了更多提交:
A--B--C--D--E主机
F--G--H topicA
I--J--K--L--M topicB
这是我遇到的一个真实案例的一个例子,topica只有几个非常大的提交,这些提交很难消化,可能会被拆分成许多较小的提交。TopICB是作为对TopICA所做工作的延续而创建的。
我查看了我自己的本地topica副本,通过大量的交互回扣和git add-e的大量使用,我能够将topica拆分成更小的提交,使topicc:
A--B--C--D--E主机
γ
| F--G--H托皮卡
γ
|我——J——K——L——我是托皮克
γ
N--O--P--Q--R--S--T--U--V--W拓扑
我和制作托皮卡的人谈过了,我们同意由我的托皮卡分公司代替托皮卡。但对于在topicb上所做的工作该怎么办呢?
我们想做的操作是:让topicc成为topicb的新基地,在topicb与topica分离的地方切割它,看起来像:
A--B--C--D--E主机
γ
| F--G--H托皮卡
γ
|我——J——K——L——我是托皮克
N--O--P--Q--R--S--T--U--V--W--I'--J'--K'--L'--M' topicC
topicb的五个承诺(i到m)在topicc之上播放,从topicb与topica分离的地方开始,创建i、j、k、l和m。
执行此操作的命令是:
git rebase --onto topicC topicA topicB
其中topicc是新基地,topica是旧基地,topicb是topicc负责人的参考。
所以你的答案是,是的,它可以不用^ ^
^的意义是:
head是指当前分支尖端的第一个父级。
请记住,Git提交可以有多个父级。{头}是对π头^ 1的短,并且您也可以适当地对“x”头“2”等进行处理。
你可以得到任何承诺的父母,而不是正义。你也可以通过一代又一代地移动:例如,Master ~2意味着主分支尖端的祖父母,在歧义的情况下倾向于第一亲本。这些说明符可以任意链接,例如,主题~ 3 ^ 2。