¿Qué significa seleccionar un compromiso con Git?
¿Que es lo que git cherry-pick <commit>
hace?
Seleccionar en Git significa elegir una confirmación de una rama y aplicarla a otra.
Esto contrasta con otras formas como merge
y rebase
que normalmente aplican muchas confirmaciones a otra rama.
También es posible seleccionar varias confirmaciones, pero merge
es la forma preferida a la selección selectiva.
Asegúrate de estar en la rama a la que deseas aplicar el compromiso.
git switch master
Ejecute lo siguiente:
git cherry-pick <commit-hash>
NÓTESE BIEN:
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.
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
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:
después:
Además, aquí hay un video tutorial muy interesante en acción al respecto: Youtube: Introducción a Git cherry-pick
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 hash
dónde hash
hay 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
Preparé ilustraciones paso a paso de lo que hace cherry-pick y una animación de estas ilustraciones (cerca del final).
- Antes de seleccionar
(vamos a seleccionar el compromisoL
de la ramafeature
):
- Iniciar el comando
git cherry-pick feature~2
(feature~2
es el segundo compromiso anterior
feature
, es decir, el compromisoL
):
- Después de ejecutar el comando (
git cherry-pick feature~2
):
Lo mismo animado:
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, L
contiene un puntero a K
(como padre), mientras que L'
contiene un puntero a E
).