tag - qué tipos de etiquetas existen en git
Cómo fusionar un commit específico en Git (3)
'' git cherry-pick
'' debería ser tu respuesta aquí.
Aplicar el cambio introducido por un commit existente.
No olvide leer la respuesta de bdonlan sobre la consecuencia de la selección de cerezas en este post:
"Extraiga todas las confirmaciones de una rama, empuje las confirmaciones especificadas a otra" , donde:
A-----B------C
/
/
D
se convierte en:
A-----B------C
/
/
D-----C''
El problema con este compromiso es que git considera que se compromete a incluir toda la historia anterior a ellos.
Donde C ''tiene una ID de
SHA-1
diferente.
Del mismo modo, elegir un compromiso de una rama a otra básicamente implica generar un parche, luego aplicarlo, y así perder la historia de esa manera.Este cambio de ID de compromiso rompe la funcionalidad de fusión de git entre otras cosas (aunque si se usa con moderación, hay heurísticas que se aplicarán a esto).
Sin embargo, lo más importante es que ignora las dependencias funcionales: si C realmente usó una función definida en B, nunca lo sabrá .
Bifurqué una sucursal de un repositorio en GitHub y cometí algo específico para mí. Ahora encontré que el repositorio original tenía una buena característica que estaba en HEAD
.
Quiero fusionarlo solo sin confirmaciones previas. ¿Qué tengo que hacer? Sé cómo fusionar todos los compromisos:
git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push
Puede usar git cherry-pick para aplicar un solo compromiso a su rama actual.
Ejemplo: git cherry-pick d42c389f
Tratemos de tomar un ejemplo y entender:
Tengo una rama, di maestro , apuntando a X <comid-id>, y tengo una nueva rama apuntando a Y <sha1>.
Donde Y <commit-id> = <master> rama se compromete - pocas confirmaciones
Ahora diga que para la rama Y tengo que cerrar por brecha las confirmaciones entre la rama maestra y la nueva. A continuación se muestra el procedimiento que podemos seguir:
Paso 1:
git checkout -b local origin/new
donde local es el nombre de la rama. Cualquier nombre puede ser dado.
Paso 2:
git merge origin/master --no-ff --stat -v --log=300
Combine las confirmaciones de la rama maestra a la nueva sucursal y también cree una confirmación de combinación del mensaje de registro con descripciones de una línea de como máximo <n> confirmaciones reales que se están fusionando.
Para obtener más información y parámetros sobre la fusión de Git, consulte:
git merge --help
Además, si necesita fusionar un compromiso específico, entonces puede usar:
git cherry-pick <commit-id>