Como pasar el contenido de un branch a otro
Existen ocasiones en las que requerimos que el contenido de una rama esté disponible en otra, sin realizar un merge
, ya que esto implicaría arrastrar otras partes del historial. Esto se logra mediante el uso de cherrypick
y, para simplificar la tarea, comenzamos realizando un squash
. A continuación la receta:
# Encontrar el SHA1 del commit para hacer Squash.
gitk
# Realizar squash, simplemente cambiando la palabra pick por s cuando corresponda:
COMMIT_ID=f7d7cd43b3ea113fcbfeac46e533c80397670854
git rebase -i ${COMMIT_ID}
# Comprobar que el squash se realizó correctamente
gitk
# Marcar el nuevo SHA1, post-squash
COMMIT_ID=d3f9bfb57ad5c88834feac6adab6c4c8a8f30ad3
# Crear una rama alternativa para intentar merge
git checkout main
git checkout -b mainTarget
# Realizar el cherrypick sobre el nuevo COMMIT_ID:
git cherry-pick ${COMMIT_ID}
# Resolver los conflictos de merge que pueden haber ocurrido
# y seguir
git cherry-pick --continue
# (en otra ventana) Confirmar que compila y pasa los tests del proyecto
./gradlew build
# Cuando se complete el cherry-pick,
# confirmar el commit con el nuevo mensaje de commit
# Merge el branch contra main
git checkout main
git merge mainTarget
# Borrar el branch temporario de trabajo
git branch -d mainTarget
git push origin main