Recientemente, me han pedido cherry-pickun compromiso.
Entonces, ¿qué significa elegir un commit en git? ¿Cómo lo haces?
                    
                        git
                                cherry-pick
                                git-cherry-pick
                                
                    
                    
                        Rahul
fuente
                
                fuente

Respuestas:
Escoger cerezas en Git significa elegir una confirmación de una rama y aplicarla en otra.
Esto está en contraste con otras formas como
mergeyrebaseque normalmente aplican muchas confirmaciones en otra rama.Asegúrese de estar en la rama a la que desea aplicar el compromiso.
Ejecute lo siguiente:
NÓTESE BIEN:
Si elige una rama pública, debería considerar usar
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 del compromiso y pueden evitar conflictos de fusión en el futuro.
Si tiene notas adjuntas a la confirmación, no siguen la selección de cereza. Para traerlos también, debe usar:
Enlaces adicionales:
fuente
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 del compromiso y pueden evitar conflictos de fusión en el futuro.git notes copy <from> <to>para traerlos también."cherry-pick commit applies the changes introduced by the named commit on the current branch"La mayoría ppl tiende a pensar en commit como cambios (como svn era iirc), pero no lo es, cada commit se refiere al árbol de trabajo completo. Aunque esto no hace una diferencia en este caso, puede ayudar a entender por qué git funciona como lo hace.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)
Editar: Dado que esta respuesta todavía está teniendo impresión, me gustaría agregar un video tutorial muy bueno en acción al respecto:
Youtube: Introducción a Git cherry-pick
antes de:
después:
fuente
La selección de cerezas en Git está diseñada para aplicar algunas confirmaciones de una rama a otra. Se puede hacer si, por ejemplo. cometió un error y cometió un cambio en una rama equivocada, pero no desea fusionar toda la rama. Solo puedes, por ejemplo. revierta el commit y selecciónelo en otra rama.
Para usarlo, solo necesita
git cherry-pick hashsaber dóndehashestá 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
fuente
Breve ejemplo de situación, cuando necesitas recoger cerezas
AHORA : arreglas algo en la versión 1 . Por supuesto, necesita esta solución también en master . Y ese es un caso de uso típico para la recolección de cerezas. Entonces, la selección de cereza en este escenario significa que toma una confirmación de la rama release1 e la incluye en la rama maestra .
fuente
cherry-pick es una característica de Git. Si alguien quiere comprometer compromisos específicos en una rama a una rama de destino, se utiliza cherry-pick.
Los pasos de git cherry-pick son los siguientes.
Aquí commit id es el id de actividad de otra rama.
Visita https://git-scm.com/docs/git-cherry-pick
fuente
Preparé ilustraciones paso a paso de lo que hace cherry-pick , y una animación de estas ilustraciones (casi al final).
(vamos a hacer una selección de cereza del compromiso
Lde la ramafeature):git cherry-pick feature~2(
feature~2es el 2º commit antesfeature, es decir, el commitL):git cherry-pick feature~2):El mismo animado:
Nota:
El commit
L'es desde el punto de vista del usuario (commit = instantánea) la copia exacta del commitL.Técnicamente (internamente), es una confirmación nueva y diferente (porque, por ejemplo,
Lcontiene un puntero aK(como su padre), mientras queL'contiene un puntero aE).fuente
Puede pensar si una selección de cereza es similar a un rebase, o más bien se gestiona como un rebase. Con esto, quiero decir que toma una confirmación existente y la regenera tomando, como punto de partida, el jefe de la rama en la que se encuentra actualmente.
A
rebasetoma una confirmación que tenía una X primaria y la regenera como si realmente tuviera una Y primaria, y esto es precisamente lo quecherry-pickhace.La selección de cereza es más sobre cómo seleccionar las confirmaciones. Con
pull(rebase), git regenera implícitamente sus confirmaciones locales además de lo que se extrae de su rama, pero concherry-pickusted elige explícitamente algunas confirmaciones y las regenera implícitamente encima de su rama actual.Entonces, la forma en que lo haces es diferente, pero en el fondo son operaciones muy similares: la regeneración de commits.
fuente
cherry-pickcomporta de la manera en que lo hace cuando la rama de destino se fusiona nuevamente en la rama de origen. Gracias Señor.Es algo así como Copiar (desde algún lugar) y Pegar (hacia algún lugar), pero para confirmaciones específicas.
Si desea hacer una reparación, por ejemplo, puede usar la
cherry-pickfunción.Haz tu
cherry-picken una rama de desarrollo, ymergeeso se compromete con una rama de lanzamiento. Del mismo modo, haga unacherry-pickdesde una rama de lanzamiento a master. Voilafuente
Cuando trabajas con un equipo de desarrolladores en un proyecto, administrar los cambios entre varias ramas de git puede convertirse en una tarea compleja. A veces no desea fusionar una rama completa en otra, y solo necesita elegir una o dos confirmaciones específicas. Este proceso se llama 'recolección de cerezas'.
Encontré un gran artículo sobre la recolección de cerezas, échale un vistazo para obtener detalles en profundidad: https://www.previousnext.com.au/blog/intro-cherry-picking-git
fuente
Si desea fusionar sin ID de confirmación, puede usar este comando
El comando anterior fusionará las últimas tres confirmaciones del maestro de 1 a 3
Si desea hacer esto para un solo compromiso, simplemente elimine la última opción
De esta manera, fusionarás el tercer commit desde el final del master.
fuente
Aplicará un compromiso particular a su rama actual.
Esto significa :
Ej: Considerar cometer A
cometer B
Si elige la confirmación B en otra rama, terminará con:
ya que commit B contiene newFileB y main , pero no newFileA , lo que resulta en un error, así que úselo con precaución.
fuente
Extracto de los documentos oficiales:
Lee mas...
fuente