Digamos que tienes un repositorio de Git. Estás trabajando en el Maestro branch y has realizado algunas confirmaciones (A, B y C) sobre el Maestro rama también.
Ahora, de repente tienes una gran idea. Entonces, creas otra rama Idea Nueva. Luego, comenzaste a realizar confirmaciones (E, F y G) allí.
También hizo algunos cambios en el Maestro rama de nuevo y agregó una nueva confirmación H.
Ahora, si su nueva idea es un éxito, es posible que desee fusionar el Idea Nueva rama a la Maestro rama. Digamos que lo fusionaste. Creará un nuevo compromiso I como puede ver en la figura siguiente. La nueva confirmación contendrá todo (todos los cambios en las confirmaciones mi, F, y GRAMO) de la rama Idea Nueva.
Ahora, digamos, no desea fusionar todas las confirmaciones de la rama Idea Nueva hacia Maestro rama. Solo desea fusionar los cambios (solo los cambios de diferencia) en la confirmación F hacia Maestro rama. Aquí es donde entra en juego git cherry pick. Git cherry pick te permite hacer eso. Simplemente encuentre el hash de la confirmación que desea seleccionar y aplíquelo a la rama que desee. Muy simple.
En este artículo, voy a mostrarte cómo seleccionar en Git. Entonces empecemos.
Flujo de trabajo de Git Cherry Pick:
En esta sección, voy a configurar un repositorio de Git de una manera que comprenda por qué se usa git cherry pick y cómo seleccionar cherry pick en Git.
Primero, inicializa un repositorio de Git vacío cherry-pick-demo / como sigue:
$ git init cherry-pick-demo
Ahora, navegue hasta el repositorio de la siguiente manera:
$ cd cherry-pick-demo /
Ahora, crea un principal.C archivo con el siguiente contenido:
Ahora, agregue el archivo al área de preparación de la siguiente manera:
$ git agregar .
Ahora, confirme los cambios de la siguiente manera:
$ git commit -m 'compromiso inicial'
Ahora, crea un .gitignore archivo con el siguiente contenido:
Agregue el archivo al área de preparación.
$ git agregar .
Confirme los cambios:
$ git commit -m 'agregado .archivo gitignore '
Como puede ver, ahora tengo 2 confirmaciones en mi Maestro rama.
$ git log --en línea
Ahora, quiero enviar mi repositorio Git local a un servidor Git remoto para que otras personas puedan trabajar en este repositorio. También puedes usar GitHub aquí. Usaré un servidor SSH local para esto aquí.
Por lo tanto, agregue una URL de repositorio Git remoto de la siguiente manera:
$ git remoto agregar origen git @ git.linuxhint.com: ~ / cherry-pick-demo.git
Ahora, presione el Maestro bifurque al repositorio remoto de Git de la siguiente manera:
$ git push origin master
Ahora digamos Beto quiere contribuir al proyecto. Entonces, clonó el repositorio de Git en su computadora.
$ git clon git @ git.linuxhint.com: ~ / cherry-pick-demo.git myproject
Ahora, Bob navega a su directorio de proyectos.
$ cd myproject /
Él también tiene las 2 confirmaciones que agregué.
$ git log --en línea
Ahora, Bob crea un prueba rama para probar sus ideas.
$ git checkout -b prueba
Decide cambiar el valor de retorno con una constante EXIT_SUCCESS desde el stdlib Biblioteca.
Agrega los cambios al área de preparación.
$ git agregar .
Compromete los cambios.
$ git commit -m 'usó EXIT_SUCCESS en lugar de 0 como valor de retorno'
Ahora, decide usar una función printMessage () para imprimir el mensaje. Entonces, escribe la función.
Vuelve a cometer los cambios.
$ git agregar .$ git commit -m 'agregada función printMessage ()'
Entonces, Bob usa la función en el programa.
Vuelve a cometer los cambios.
$ git agregar .$ git commit -m 'usó la función printMessage () para imprimir el mensaje'
Ahora, Bob tiene las siguientes confirmaciones en el prueba rama.
Ahora, Bob empuja la rama de prueba al repositorio remoto de Git.
$ git prueba de origen de empuje
Ahora, Bob te llama y te cuenta los increíbles cambios que hizo. Entonces, buscó los cambios en el repositorio remoto de Git en su propio repositorio local.
$ git fetchAhora ves una nueva rama origen / prueba.
También encontraste 3 nuevas confirmaciones que hizo Bob.
$ git log: origen / prueba en línea
Ahora, le gustaría saber qué cambios hizo Bob.
$ git log -p origen / prueba
Decide no reemplazar el valor de retorno con EXIT_SUCCESS como lo hizo Bob.
Te gusta el concepto de usar una función para imprimir mensajes.
A ti también te gusta este compromiso.
Entonces, quieres fusionar 2 de las 3 confirmaciones que hizo bob. Si ha utilizado git merge para fusionar la prueba de la rama, se aplicarán las 3 confirmaciones. Pero, con la función git cherry pick, solo puede fusionar las confirmaciones que desee.
Tenga en cuenta que cuando selecciona las confirmaciones en Git, siempre comienza con la confirmación más antigua y avanza hacia la más nueva poco a poco.
Antes, escogí la cereza, el principal.C el archivo se ve de la siguiente manera.
Ahora, escojamos la más antigua de las 2 confirmaciones, 9a4e532 de la siguiente manera:
$ git cherry-pick 9a4e532
Un conflicto de fusión! Esto puede pasar.
Ahora, abre el principal.C archivar y arreglar el conflicto de fusión.
El archivo final debe tener el siguiente aspecto.
Ahora, agregue los cambios al área de preparación.
$ git agregar.
Ahora, confirme los cambios de la siguiente manera:
$ git cherry-pick --continuar
NOTA: También puedes usar git commit aquí también. Tu decides. yo prefiero git cherry-pick -continuar ya que usará automáticamente el mensaje de confirmación de la confirmación que estoy seleccionando.
Ahora, escriba su mensaje de confirmación aquí y guarde el archivo.
Se debe agregar una nueva confirmación.
Ahora, elija la siguiente confirmación de la siguiente manera:
$ git cherry-pick 08ba5e7
Sin conflicto de fusión. Estupendo! Se debe agregar una nueva confirmación automáticamente.
Como puede ver, obtengo exactamente lo que quería. Solo fusioné las confirmaciones que necesitaba.
Entonces, así es como eliges la cereza en Git. Gracias por leer este artículo.