Skip to main content

Mutable Ideas

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