Solución:
Una forma de lograrlo es a través de git reset
. Mientras que en la rama B
ejecutar
git reset --hard A
A partir de entonces, rama B
apunta al compromiso de cabeza de A
. los --hard
La opción restablece el índice y el árbol de trabajo para que todos los archivos rastreados se restablezcan a la versión en la rama A
. El antiguo ID de compromiso HEAD de A
se almacena en .git/ORIG_HEAD
para permitir deshacer el cambio.
Alternativamente, mientras no está en la sucursal B
– puedes eliminar la rama B
y lo recreé así:
git branch -d B # delete branch B
git branch B A # re-create branch B and let it point to the commit of branch A
Aparte de la primera sugerencia, esto dejará intactos el índice y el árbol de trabajo.
Si quieres tu sucursal B
para verse exactamente como una rama A
. Podrías hacer un reset --hard
git checkout branch-B
git reset --hard branch-A
Tenga cuidado de perder confirmaciones en este caso. Su branch-B se verá exactamente como branch-A, las confirmaciones que se hicieron en branch-B, que no estaban presentes en branch-A, serán perdió. Además, si la rama B se comparte con otras personas, no se recomienda realizar esta operación.
En ese caso, puede intentar revertir las confirmaciones que no desea en la rama B
git revert <sha-of-"some other commit">
git revert <sha-of-"merge of other stuff from branch C (into branch B)">
La segunda confirmación parece una combinación de confirmación, por lo que es posible que también tenga que pasar el padre.
git revert <sha-of-"merge of other stuff from branch C (into branch B)"> -m1
Para completar, agreguemos esta forma muy simple de lograrlo:
git branch -f branchB branchA
Aprovecha el hecho de que las ramas en git son meros indicadores. Este comando simplemente reemplaza la referencia a la confirmación de punta de una rama con otra. No es necesario realizar cambios complejos en la estructura para construir algo que ya tiene.
(Ver el doc)