Tengo BranchA
cuál es 113 compromisos por delante BranchB
.
Pero solo quiero que los últimos 10 o más compromisos se BranchA
fusionen BranchB
.
¿Hay alguna forma de hacer esto?
Tengo BranchA
cuál es 113 compromisos por delante BranchB
.
Pero solo quiero que los últimos 10 o más compromisos se BranchA
fusionen BranchB
.
¿Hay alguna forma de hacer esto?
Respuestas:
El git cherry-pick <commit>
comando le permite tomar un solo commit (de cualquier rama) y, esencialmente, volver a crearlo en su rama de trabajo.
El capítulo 5 del libro Pro Git lo explica mejor que yo , completo con diagramas y demás. ( El capítulo sobre Rebasar también es una buena lectura).
Por último, hay algunos buenos comentarios sobre la selección de cereza vs fusión vs rebase en otra pregunta SO .
A
se bifurca master
y usted trabaja un poco en él, creando commits secundarios a B
través de E
. Say E
solo tiene 1 línea agregada desde D
. Si git cherry-pick E
en master
, ¿se aplica todos los cambios del A
medio E
en la master
rama, o lo hace sólo se aplica el cambio de D
a E
, es decir, que añade que la única línea de 1 a master
? Si el caso es el primero, ¿cómo puedo lograr el segundo? (aparte de copiar y pegar manualmente)
Si BranchA no se ha enviado a un control remoto, puede reordenar las confirmaciones utilizando rebase
y luego simplemente merge
. Es preferible utilizar merge
más rebase
cuando sea posible, ya que no crea confirmaciones duplicadas.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
FUENTE: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
La otra forma de mover el trabajo introducido de una rama a otra es seleccionarlo. Una selección de cereza en Git es como un rebase para un solo commit. Toma el parche que se introdujo en una confirmación e intenta volver a aplicarlo en la rama en la que se encuentra actualmente. Esto es útil si tiene una serie de confirmaciones en una rama de tema y desea integrar solo una de ellas, o si solo tiene una confirmación en una rama de tema y prefiere seleccionarla en lugar de ejecutar rebase. Por ejemplo, suponga que tiene un proyecto que se ve así:
Si desea extraer commit e43a6 en su rama maestra, puede ejecutar
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Esto extrae el mismo cambio introducido en e43a6, pero obtiene un nuevo valor SHA-1 de confirmación, porque la fecha aplicada es diferente. Ahora tu historia se ve así:
Ahora puede eliminar la rama de su tema y soltar las confirmaciones que no quería obtener.