tl; dr
La sintaxis correcta para rebase Bademás de Ausar git rebase --ontoen su caso es:
git checkout B
git rebase --onto A B^
o rebase Bencima de Acomenzar desde el commit que es el padre deB referencia con B^o B~1.
Si estás interesado en la diferencia entre git rebase <branch>y git rebase --onto <branch>sigue leyendo.
El rápido: git rebase
git rebase <branch>va a rebasar la rama que actualmente ha desprotegido, al que hace referencia HEAD, en la parte superior de la última cometen es accesible desde <branch>pero no de HEAD.
Este es el caso más común de rebase y podría decirse que requiere menos planificación por adelantado.
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E (HEAD) D---E (HEAD)
En este ejemplo, Fy Gson confirmaciones a las que se puede acceder branchpero no desde HEAD. Decir git rebase branchque tomará D, esa es la primera confirmación después del punto de bifurcación, y volver a crearla (es decir, cambiar su padre ) encima de la última confirmación accesible desde, branchpero no desde HEAD, es decir G.
The Precise: git rebase --onto con 2 argumentos
git rebase --ontole permite volver a crear una base a partir de una confirmación específica . Le otorga un control exacto sobre lo que se está rebajando y dónde. Esto es para escenarios en los que necesita ser preciso.
Por ejemplo, imaginemos que necesitamos un rebase HEADprecisamente al Finicio E. Solo estamos interesados en incorporar Fa nuestra rama de trabajo mientras que, al mismo tiempo, no queremos conservarla Dporque contiene algunos cambios incompatibles.
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E---H---I (HEAD) E---H---I (HEAD)
En este caso, diríamos git rebase --onto F D. Esto significa:
Rebase el commit accesible desde HEADcuyo padre está Dencima F.
En otras palabras, cambie el padre de Ede Da F. La sintaxis de git rebase --ontoes entonces git rebase --onto <newparent> <oldparent>.
Otro escenario en el que esto es útil es cuando desea eliminar rápidamente algunas confirmaciones de la rama actual sin tener que hacer un rebase interactivo :
Before After
A---B---C---E---F (HEAD) A---B---F (HEAD)
En este ejemplo, para eliminar Cy Ede la secuencia usted diría git rebase --onto B E, o volvería HEADa poner encima de Bdonde estaba el padre anterior E.
El cirujano: git rebase --onto con 3 argumentos
git rebase --ontopuede ir un paso más allá en términos de precisión. De hecho, le permite volver a crear una base arbitraria de confirmaciones encima de otra.
Aquí hay un ejemplo:
Before After
A---B---C---F---G (branch) A---B---C---F---G (branch)
\ \
D---E---H---I (HEAD) E---H (HEAD)
En este caso, queremos cambiar el rango exacto E---Hencima F, ignorando a dónde HEADapunta actualmente. Podemos hacerlo diciendo git rebase --onto F D H, lo que significa:
Rebase el rango de confirmaciones cuyo padre está Dpor Hencima F.
La sintaxis de git rebase --ontocon un rango de confirmaciones se convierte en git rebase --onto <newparent> <oldparent> <until>. El truco aquí es recordar que la confirmación a la que hace referencia <until>se incluye en el rango y se convertirá en la nueva una HEADvez que se complete el rebase.