Recientemente, me han pedido cherry-pick
un 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
merge
yrebase
que 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 hash
saber dóndehash
está 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
L
de la ramafeature
):git cherry-pick feature~2
(
feature~2
es 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,
L
contiene 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
rebase
toma 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-pick
hace.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-pick
usted 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-pick
comporta 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-pick
función.Haz tu
cherry-pick
en una rama de desarrollo, ymerge
eso se compromete con una rama de lanzamiento. Del mismo modo, haga unacherry-pick
desde 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