tl; dr
在您的情况下B基于A使用的正确语法git rebase --onto是:
git checkout B
git rebase --onto A B^
或底垫B的顶部A从起始提交即父B与引用的B^或B~1。
如果您对git rebase <branch>和之间的差异感兴趣,请继续git rebase --onto <branch>阅读。
快速:git rebase
git rebase <branch>是要重订当前已签出的分支,通过引用HEAD,在上面的最新承诺是可达的距离<branch>,但不从HEAD。
这是重新部署的最常见情况,并且可以说是需要较少的预先计划的情况。
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E (HEAD) D---E (HEAD)
在这个例子中 F and G是可从branch但无法访问的提交HEAD。说git rebase branch将采取D,那是分支点后的第一个承诺,和重订它(即改变其母公司)上的最新顶级提交从可达branch但不从HEAD,即G。
精确:git rebase --onto有2个参数
git rebase --onto允许您从特定的提交开始进行基础调整。它使您可以精确控制要重新设置的内容和位置。这适用于需要精确的情况。
例如,让我们假设我们需要从开始HEAD精确地重新建立基础。我们只想加入我们的工作分支,而与此同时,我们不想保留它,因为它包含一些不兼容的更改。FEFD
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E---H---I (HEAD) E---H---I (HEAD)
在这种情况下,我们会说git rebase --onto F D。这表示:
重新确定HEAD其父级D位于之上的可达的提交F。
换一种说法, 将的父项E从更改D为F。git rebase --onto然后是的语法git rebase --onto <newparent> <oldparent>。
方便使用的另一种情况是,您想从当前分支中快速删除一些提交而不必进行交互式变基:
Before After
A---B---C---E---F (HEAD) A---B---F (HEAD)
在此示例中,为了删除C和E来自顺序,你会说git rebase --onto B E,或重订HEAD之上B的老父母在何处E。
外科医生:git rebase --onto有3个参数
git rebase --onto可以在精度上更进一步。实际上,它允许您在另一个提交基础上重新构建任意范围的提交。
这是一个例子:
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E---H---I (HEAD) E---H (HEAD)
在这种情况下,我们要变基的确切范围E---H之上F,忽略了其中HEAD目前是指向。我们可以这样说git rebase --onto F D H,这意味着:
调整基线提交的,其父母为范围D达H之上F。
然后,git rebase --onto带有一定范围的提交的语法变为git rebase --onto <newparent> <oldparent> <until>。这里的窍门是要记住,引用的提交<until>已包含在范围内,并且在完成基准调整后将成为新的提交HEAD。