rama qué problemas deshacer consola conflictos conflicto con comandos git cherry-pick git-cherry-pick

problemas - ¿Qué significa elegir un compromiso con git?



rama git (6)

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


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

Si desea hacer una corrección, por ejemplo, puede utilizar la función de cherry-pick .

Haga su cherry-pick en una rama de desarrollo y merge ese compromiso con una rama de lanzamiento. Del mismo modo, hacer una cherry-pick de cherry-pick de una rama de lanzamiento para dominar. Voila


Esta cita está tomada de; Control de versiones con Git (libro realmente genial, te animo a que lo compres si estás interesado en git)

Edit: Ya que esta respuesta todavía está impresionando, me gustaría agregar un muy buen video tutorial de acción al respecto:

Youtube: Introducción a Git cherry-pick

Uso de git cherry-pick El comando git cherry-pick commit aplica los cambios introducidos por el commit nombrado en la rama actual. Se introducirá un nuevo, distinto compromiso. Estrictamente hablando, el uso de 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 aplicar un diff, es posible que deba resolver conflictos para aplicar completamente los cambios del compromiso dado . El comando git cherry-pick se usa normalmente para introducir confirmaciones particulares de una rama dentro de un repositorio en una rama diferente. Un uso común es el envío hacia adelante o hacia atrás de confirmaciones de puerto desde una rama de mantenimiento a una rama de desarrollo.

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

antes de:

después:


La cosecha de cerezas en git significa elegir un commit de una rama y aplicarlo en otra.

Esto contrasta con otras formas, como merge y rebase que normalmente aplican muchos confirmaciones en otra rama.

  1. Asegúrese de estar en la rama a la que desea aplicar el compromiso.

    git checkout master

  2. Ejecuta lo siguiente:

    git cherry-pick <commit-hash>

NÓTESE BIEN:

  1. Si elige desde 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 hacer un seguimiento del origen del compromiso y evitar conflictos de fusión en el futuro.

  2. Si tiene notas adjuntas al compromiso, no siguen la selección de cereza. Para traerlos también, tienes que usar:

    git notes copy <from> <to>

Enlaces adicionales:


La recolección de cerezas en Git está diseñada para aplicar algo de confirmación de una rama a otra. Se puede hacer si por ejemplo. cometió un error y cometió un cambio en la rama incorrecta, pero no desea fusionar toda la rama. Usted puede simplemente por ejemplo. Revertir el commit y recogerlo en otra rama.

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

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


Puede pensar si una selección de cereza es similar a una rebase, o más bien se gestiona como una rebase. Con esto, quiero decir que toma un compromiso existente y lo regenera tomando, como punto de partida, el jefe de la rama en la que se encuentra actualmente.

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

La elección de la cereza es más acerca de cómo selecciona los compromisos. Con pull (rebase), git regenera implícitamente tus compromisos locales además de lo que se arrastra a tu rama, pero con cherry-pick , eliges explícitamente algunos compromisos y los regeneras implícitamente sobre tu rama actual.

Por lo tanto, la forma en que lo hace difiere, pero bajo el capó son operaciones muy similares: la regeneración de confirmaciones.


cherry-pick es una característica de Git. Si alguien quiere comprometer compromisos específicos en una rama con una rama objetivo, se utiliza cherry-pick.
Los pasos de git cherry-pick son los siguientes.

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

    Aquí, el ID de la actividad es el ID de la actividad de otra rama.

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f

  3. empujar a la rama objetivo

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