Las respuestas principales describen cómo aplicar los cambios de una confirmación específica a la rama actual. Si eso es lo que quieres decir con "cómo fusionar", simplemente usa cherry-pick como sugieren.
Pero si realmente desea una fusión , es decir, desea una nueva confirmación con dos padres (la confirmación existente en la rama actual y la confirmación a la que desea aplicar los cambios), entonces una selección de cereza no logrará eso.
Puede ser deseable tener un verdadero historial de fusión, por ejemplo, si su proceso de compilación aprovecha la ascendencia git para establecer automáticamente cadenas de versión basadas en la última etiqueta (usando git describe
).
En lugar de seleccionar Cherry, puede hacer un real git merge --no-commit
y luego ajustar manualmente el índice para eliminar cualquier cambio que no desee.
Supongamos que está en la rama A
y desea fusionar el commit en la punta de la rama B
:
git checkout A
git merge --no-commit B
Ahora está configurado para crear un compromiso con dos padres, el consejo actual se compromete con A
y B
. Sin embargo, es posible que se apliquen más cambios de los que desea, incluidos los cambios de confirmaciones anteriores en la rama B. Debe deshacer estos cambios no deseados y luego confirmar.
(Puede haber una manera fácil de configurar el estado del directorio de trabajo y el índice de nuevo a la forma en que estaba antes de la fusión, para que tenga una pizarra limpia sobre la cual elegir el compromiso que quería en primer lugar. Pero No sé cómo lograr esa pizarra limpia, git checkout HEAD
y git reset HEAD
ambos eliminarán el estado de fusión, lo que anulará el propósito de este método).
Así que deshaga manualmente los cambios no deseados. Por ejemplo, podrías
git revert --no-commit 012ea56
por cada commit no deseado 012ea56
.
Cuando termine de ajustar las cosas, cree su compromiso:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Ahora solo tiene el cambio que desea, y el árbol de ascendencia muestra que técnicamente se fusionó con B.