Tenemos dos ramas:
o---(C1A)---(C2A)---(C3A)-----> A (master)
o---(C1B)---(C2B)---(C3B)-----> B (hija)
Donde:
C{#}{Rama}
- C : significa commit
- # : número del commit
- Rama : nombre de la rama
Entonces queremos pasar el segundo commit de la rama B (C2B) a la rama A, de tal forma que quede así:
o---(C1A)---(C2A)---(C3A)---(C2B)------> A (master)
o---(C1B)---(C2B)---(C3B)---------------- -> B (hija)
Para ello debemos hacer los siguientes pasos:
1.- Para saber los commits de la rama master (A) se hace un git log
$ git log --pretty=oneline
$ git log --pretty=oneline
3cdd67fed7ce2265cb366787455da6fc34c022f5 C3A
c876d29ace62f329da3e5e2874f546fef79de9a8 C2A
1356af1f05d7630f1252618bfe5b5116c9c76654 C1A
2.- Cambio a la rama hija (B) para visualizar los commits
$ git ck hija
$ git log --pretty=oneline
e7e7b0a1a900b541cbb507d1a638cbe0c92c2697 C3B
0244a2f19abf4a38ac77b6c376512c0e0a86d9d4 C2B
c5d160eae85ebfd5631a716f39842a1f99ea947d C1B
con esto se identifica el #id del commit C2B para poder pasarlo a la rama master (A)
3.- Una vez teniendo el #ID del commit, cambio de rama a la master para realizar un cherry-pick
$ git ck master
Al realizar un CHERRY-PICK se indica que solo el commit con el #ID va a ser aplicado a la rama donde estoy actualmente, en este caso en la rama master (A).
Para este ejemplo el commit C2B contiene un archivo llamado file2B.md
El formato del cherry-pick sería el siguiente: git cherry-pick #ID
$ git cherry-pick 0244a2f19abf4a38ac77b6c376512c0e0a86d9d4
[master adee66a] C2B
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file2B.md
4.- Para terminar revisamos los commits y vemos que se aplicó correctamente
$ git log --pretty=oneline
adee66a2f27e2bc1b05176efd115e0eba81a8b80 C2B
3cdd67fed7ce2265cb366787455da6fc34c022f5 C3A
c876d29ace62f329da3e5e2874f546fef79de9a8 C2A
1356af1f05d7630f1252618bfe5b5116c9c76654 C1A
En caso de Confictos, que hacer?
Es posible que al realizar un cherry-pick nos encontremos conflictos, esto sucede cuando se ha
editado el mismo archivo por otros usuarios.
Para este caso:
- Primero debemos resolver el conflicto:
$ git mergetool
- Segundo debemos agregar estos cambios:
$ git add --all
- Tercero debemos aplicar el commando:
$git cherry-pick --continue
* si por algún motivo deseamos abortar el cherry-pick, debemos aplicar este comando:
$ git cherry-pick --abort
Exponiendo un caso
Aplicamos el #ID del commit que se aplicará a la rama master, entonces se hace un cherry-pick
$ git cherry-pick 688743c6515ed2d32cfbc361c3a796d3b0b1c4c6
error: no se puede aplicar 688743c... C4B
consejo: después de la resolución de conflictos, marcar las rutas corregidas
consejo: con «git add » o «git rm »
consejo: y hacer commit del resultado con «git commit»
Con esto observamos que hay conflictos y el estado nos dará lo siguiente:
$ git status
En la rama master
You are currently cherry-picking commit 688743c.
(fix conflicts and run "git cherry-pick --continue")
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Rutas no combinadas:
(use «git add ...» para marcar resolución)
modificado por ambos: readme.md
no hay cambios agregados al commit (use «git add» o «git commit -a»)
Se aplican los siguientes pasos para resolver los confictos y continuar con el cherry-pick
$ git mergetool
$ git add --all
$ git cherry-pick --continue
Así resolvemos los conflictos y aplicamos los cambios.
Caso Práctico
C:\Users\Bext\IdeaProjects\HibernateRoad>git checkout A
Switched to branch 'A'
C:\Users\Bext\IdeaProjects\HibernateRoad>git log --pretty=oneline
3d9f5076c3256f500a664790d5238e0d64c33b89 + Temporal
01e3b261306ef175611c05ff9dad1a0e7fd42c9c + Temporal
0fbccdd5009a7f2df0af4ddab740dfa400b0b4c5 + @Entity Persona @GenericGenerator
5ef85bf2229f1157e518181db3547316b9d22d00 Primer Commit @Entity Persona mysql
C:\Users\Bext\IdeaProjects\HibernateRoad>git checkout B
Switched to branch 'B'
C:\Users\Bext\IdeaProjects\HibernateRoad>git log --pretty=oneline
037aa0ff7c54ab23d8eb4d3e481223e5270f7a0e + @Entity Vehiculo @GenericGenerator se agrega a hibernate.cfg.xml
a014815d78a1261e50b4306afaa4143c2ed07fac + @Entity Vehiculo @GeneratedValue
5ccb332ae5b1477b34ba7525b05bfed647331e16 Primer Commit @Entity Vehiculo
5ef85bf2229f1157e518181db3547316b9d22d00 Primer Commit @Entity Persona mysql
Caso Práctico
C:\Users\Bext\IdeaProjects\HibernateRoad>git checkout A
Switched to branch 'A'
C:\Users\Bext\IdeaProjects\HibernateRoad>git log --pretty=oneline
3d9f5076c3256f500a664790d5238e0d64c33b89 + Temporal
01e3b261306ef175611c05ff9dad1a0e7fd42c9c + Temporal
0fbccdd5009a7f2df0af4ddab740dfa400b0b4c5 + @Entity Persona @GenericGenerator
5ef85bf2229f1157e518181db3547316b9d22d00 Primer Commit @Entity Persona mysql
C:\Users\Bext\IdeaProjects\HibernateRoad>git checkout B
Switched to branch 'B'
C:\Users\Bext\IdeaProjects\HibernateRoad>git log --pretty=oneline
037aa0ff7c54ab23d8eb4d3e481223e5270f7a0e + @Entity Vehiculo @GenericGenerator se agrega a hibernate.cfg.xml
a014815d78a1261e50b4306afaa4143c2ed07fac + @Entity Vehiculo @GeneratedValue
5ccb332ae5b1477b34ba7525b05bfed647331e16 Primer Commit @Entity Vehiculo
5ef85bf2229f1157e518181db3547316b9d22d00 Primer Commit @Entity Persona mysql
fdt
No hay comentarios:
Publicar un comentario