Antes de empezar a leer este artículo doy por hecho que tú ya tienes conocimientos sobre git y sabes al menos lo básico acerca de este sistema de control de versiones.
¿No sabes que es git?, no te preocupes, puedes tomar el curso de git que hice con la colaboración de Código facilito.
Copiando un commit a otra rama con cherry-pick
Estoy seguro de que en algún punto de tu vida al trabajar con git te has encontrado con la situación de querer pasar un commit a otra rama, ya sea porque hayas cometido un error o simplemente necesitas hacerlo. Un merge no sería opción, pues ya estarías pasando más de un commit a tu rama.
Para ello tenemos
cherry-pick
como solución.
Supongamos que tenemos dos ramas, cada una con tres commits:
- Rama 1: Master
- Rama 2: Desarrollo
Y queremos pasar el commit número 3 de la rama Desarrollo a la rama master
Para ello vamos a realizar lo siguiente:
1. Nos movemos a la rama desarrollo:
git checkout desarrollo
2. Copiamos el código SHA
git log
Con git log
obtenemos es una lista de nuestros commits, con sus respectivos códigos SHA. Obviamente vamos a copiar el código SHA del commit que queremos mover a nuestra rama.
3. Regresamos a la rama master
git checkout master
4. Usamos cherry-pick
git cherry-pick c8dc73f56eb5e548a0f9df2989d8346580ada1b7
Lo que sigue después de
cherry-pick
es el código SHA.
Ahora master debería tener el commit de desarrollo:
De manera opcional puedes eliminar el commit que hay en desarrollo (en caso de que no lo necesites).
git reset --hard fc822f1991a1c72b71062d98298b6d5f4eb41c97
Después de
git reset --hard
también usamos un código SHA, en este caso sería el commit anterior al que le aplicamos cherry-pick. Para entender mejorgit reset
te recomiendo ver el curso que mencione anteriormente.
Si llegas a tener conflictos al usar cherry-pick
, debes hacer lo mismo que cuando tienes conflictos con un merge
y cambiar los archivos con los que tengas problemas (posiblemente por haber editado el mismo archivo).
Una vez que hayas solucionado el problema con tus archivos, hay que agregar los cambios:
git add -A
Y continuar con cherry-pick
git cherry-pick --continue
Como puedes ver, cherry-pick
es muy útil para situaciones en las que se necesite copiar o mover un commit a otra rama por alguna razón, sin tener que pasar todos los commits, como pasaría con un merge
.
Incluso podríamos mover commits anteriores al último:
Solo que en este caso hay que tener cuidado si queremos aplicar git reset
.