¿Qué significa seleccionar un compromiso con Git?

Resuelto Rahul asked hace 12 años • 15 respuestas

¿Que es lo que git cherry-pick <commit>hace?

Rahul avatar Feb 18 '12 14:02 Rahul
Aceptado

Seleccionar en Git significa elegir una confirmación de una rama y aplicarla a otra.

Esto contrasta con otras formas como mergey rebaseque normalmente aplican muchas confirmaciones a otra rama.

También es posible seleccionar varias confirmaciones, pero mergees la forma preferida a la selección selectiva.

  1. Asegúrate de estar en la rama a la que deseas aplicar el compromiso.

    git switch master
    
  2. Ejecute lo siguiente:

    git cherry-pick <commit-hash>
    

NÓTESE BIEN:

  1. Si elige una sucursal pública, debería considerar usar

    git cherry-pick -x <commit-hash>
    

    Esto generará un mensaje de confirmación estandarizado. De esta manera, usted (y sus compañeros de trabajo) aún pueden realizar un seguimiento del origen de la confirmación y evitar conflictos de fusión en el futuro.

  2. Si tiene notas adjuntas a la confirmación, no siguen la selección. Para traerlos también, debes usar:

    git notes copy <from> <to>
    

Enlaces adicionales:

  • página de la guía oficial de git
  • guía de selección de git
Philip Fourie avatar Feb 18 '2012 07:02 Philip Fourie

Esta cita está tomada de: Control de versiones con Git

Usando git cherry-pick El comando git cherry-pick commit aplica los cambios introducidos por la confirmación nombrada en la rama actual. Introducirá un compromiso nuevo y distinto. Estrictamente hablando, usar git cherry-pick no altera el historial existente dentro de un repositorio; en cambio, se suma a la historia. Al igual que con otras operaciones de Git que introducen cambios a través del proceso de aplicación de una diferencia, es posible que necesites resolver conflictos para aplicar completamente los cambios de la confirmación dada . El comando git cherry-pick se usa normalmente para introducir confirmaciones particulares de una rama dentro de un repositorio a una rama diferente. Un uso común es reenviar o retroceder confirmaciones desde una rama de mantenimiento a una rama de desarrollo.

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, below

antes: antes

después: después

Además, aquí hay un video tutorial muy interesante en acción al respecto: Youtube: Introducción a Git cherry-pick

Teoman shipahi avatar May 13 '2015 15:05 Teoman shipahi

La selección de cerezas en Git está diseñada para aplicar algún compromiso de una rama a otra. Se puede hacer si, por ejemplo. Cometí un error y cometí un cambio en la rama equivocada, pero no quiero fusionar toda la rama. Puedes simplemente, por ejemplo. revierta la confirmación y selecciónela en otra rama.

Para usarlo, solo necesita git cherry-pick hashdónde hashhay un hash de confirmación de otra rama.

Para conocer el procedimiento completo, consulte: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html

Tadeck avatar Feb 18 '2012 07:02 Tadeck

Preparé ilustraciones paso a paso de lo que hace cherry-pick y una animación de estas ilustraciones (cerca del final).

  1. Antes de seleccionar
    (vamos a seleccionar el compromiso Lde la rama feature): Una imagen que muestra el estado de un repositorio de Git antes de realizar la selección.  En la rama maestra, hay cinco confirmaciones, de la A a la E. Una segunda rama, denominada "característica", contiene cuatro confirmaciones y diverge en la confirmación B. Las confirmaciones de "característica" están etiquetadas de K a N, con L en el medio.

  1. Iniciar el comando git cherry-pick feature~2
    ( feature~2es el segundo compromiso anterior
    feature, es decir, el compromiso L): Esta imagen muestra el resultado de una operación de selección que saca el compromiso L de la rama de características y lo coloca después del compromiso E en la rama maestra.

  1. Después de ejecutar el comando ( git cherry-pick feature~2): La rama maestra ahora contiene una confirmación, llamada L' o L-prime.  La rama de funciones no ha cambiado.

Lo mismo animado: Una animación de los pasos anteriores.


Nota:

La confirmación L'es desde el punto de vista del usuario (compromiso = instantánea) la copia exacta de la confirmación L.

Técnicamente (internamente), es una confirmación nueva y diferente (porque, por ejemplo, Lcontiene un puntero a K(como padre), mientras que L'contiene un puntero a E).

MarianD avatar Sep 17 '2019 02:09 MarianD