¿Qué significa elegir un commit con git?


Recientemente, se me ha pedido que elija un commit. Pero no tengo idea de lo que significa. Entonces, ¿qué significa cherry picking un commit en git? ¿Cómo lo haces?

Author: robingrindrod, 2012-02-18

6 answers

Cherry picking en git significa elegir un commit de una rama y aplicarlo a otra.

Esto está en contraste con otras formas como merge y rebase que normalmente aplican muchas confirmaciones a otra rama.

  1. Asegúrese de que está en la rama a la que desea aplicar el commit.

    git checkout master
    
  2. Ejecute lo siguiente:

    git cherry-pick <commit-hash>
    

N.b.:

  1. Si eliges una rama pública, deberías 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) todavía pueden realizar un seguimiento del origen de la confirmación y pueden evitar conflictos de fusión en el futuro.

  2. Si tiene notas adjuntas a la confirmación, no siguen la elección correcta. Para traerlos también, tienes que usar:

    git notes copy <from> <to>
    

Enlaces adicionales:

 1747
Author: Philip Fourie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-14 15:02:16

Esta cita está tomada de; Control de versiones con Git (Muy buen libro, te animo a comprarlo si estás interesado en git)

Editar: Ya que esta respuesta todavía está recibiendo la impresión, me gustaría añadir muy agradable en vídeo tutorial de acción sobre ella:

Youtube: Introducción a Git cherry-pick

Usando git cherry-pick El comando git cherry-pick commit aplica cambios introducidos por el commit nombrado en la rama actual. Lo hará introduce una nueva confirmación distinta. Estrictamente hablando, usando 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 introducir cambios a través del proceso de aplicación de un diff, es posible que necesite resolver conflictos para aplicar completamente los cambios de la confirmación dada . El comando git cherry-pick se usa típicamente para introducir commits de una rama dentro de un repositorio en un repositorio diferente Sucursal. Un el uso común es reenviar-o retroceder-cambios de puerto desde un mantenimiento rama a una rama de desarrollo.

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

Antes: antes

Después: despues

 195
Author: Teoman shipahi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-19 19:59:34

Cherry picking en Git está diseñado para aplicar algunos commit de una rama a otra rama. Se puede hacer si usted por ejemplo. cometió un error y cometió un cambio en la rama incorrecta, pero no desea fusionar toda la rama. Usted puede sólo por ejemplo. revierte el commit y escógelo en otra rama.

Para usarlo, solo necesita git cherry-pick hash, donde hash es un hash de confirmación de otra rama.

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

 129
Author: Tadeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-14 10:41:34

Cherry-pick es una característica de Git. Si alguien quiere enviar confirmaciones específicas en una rama a una rama de destino, entonces se usa cherry-pick.
git cherry-pick los pasos son los siguientes.

  1. checkout (cambiar a) rama de destino.
  2. git cherry-pick <commit id>
    

    Aquí el id de confirmación es el id de actividad de otro branch.Eg.

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. push to target branch

Visita https://git-scm.com/docs/git-cherry-pick

 27
Author: Vijay S B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 00:48:31

Puedes pensar si un cherry pick es similar a un rebase, o más bien se maneja como un rebase. Con esto, quiero decir que toma un commit existente y lo regenera tomando, como punto de partida, la cabeza de la rama en la que estás actualmente.

Un rebase toma un commit que tenía un padre X y regenera el commit como si realmente tuviera un padre Y, y esto es precisamente lo que hace un cherry-pick.

Cherry pick es más acerca de cómo seleccionar las confirmaciones. Con pull (rebase), git regenera implícitamente tus commits locales encima de lo que se extrae de tu rama, pero con cherry-pick eliges explícitamente algunos commits, e implícitamente los regeneras encima de tu rama actual.

Así que la forma en que lo haces difiere, pero bajo el capó son operaciones muy similares - la regeneración de commits.

 8
Author: Hugh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 22:00:30

Es algo así como Copiar (desde algún lugar) y Pegar (a algún lugar), pero para confirmaciones específicas.

Si desea hacer una corrección en caliente, por ejemplo, puede usar la función cherry-pick.

Hacer su cherry-pick en una rama de desarrollo, y merge que se comprometen a una rama de liberación. Del mismo modo, haga un cherry-pick desde una rama release a master. Voila

 4
Author: Ajeet Sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-11 21:54:23