rama partir otra crear consola conflictos como comandos cambiar git git-merge git-rebase git-pull

partir - git rebase



Convierta la fusión en rebase sin tener que realizar la fusión nuevamente (1)

git pull --rebase un error: debería haber utilizado git pull --rebase , pero git pull --rebase un simple git pull , fusioné todo y ahora tengo un merge commit en la HEAD de mi sucursal.

Quiero deshacerme de ese compromiso de fusión y pensé que git rebase -i HEAD~3 emitir un git rebase -i HEAD~3 , mover mi último compromiso local a la parte superior y aplastar el compromiso de fusión en él. Por desgracia, la confirmación de fusión no está disponible para el aplastamiento. Si hago esto, me meto en estados intermedios donde necesito hacer la fusión nuevamente, lo cual es mucho trabajo.

¿Hay una manera de salir de esto sin tener que realizar la fusión de nuevo? ¿Parece que debería ser posible usar el comando merge de alguna manera?


tl; dr

Incluso si puede incluir las combinaciones de combinación en una rebase, no puede aplastar las combinaciones de combinación. Git te lo hará saber diciendo:

Negándose a aplastar una fusión: <SHA-1>

Lo que puede hacer para mantener los cambios realizados durante la fusión es convertir el compromiso de fusión en un compromiso normal . En ese punto puedes aplastarlo como cualquier otro commit.

Suponiendo que HEAD está apuntando a la confirmación de fusión:

git reset --soft HEAD~1 # Keeps changes in the index git commit # Create a new commit, this time not a merge commit git rebase -i HEAD~4 # Do an interactive rebase and squash the new commit

Preservar las combinaciones de mezcla durante un rebase

En general, puede preservar las confirmaciones de fusión al hacer un rebase utilizando git rebase -p .
Sin embargo, su propósito es reproducir las confirmaciones previas a la fusión . No se conservan los cambios que forman parte de los compromisos de fusión (por ejemplo, resoluciones de conflictos).

Aquí está de la documentation :

-pag
- fusiones
Vuelva a crear las confirmaciones de combinación en lugar de aplanar el historial reproduciendo las confirmaciones de una combinación de confirmaciones. Las soluciones de fusión de conflictos o las enmiendas manuales para fusionar confirmaciones no se conservan.
Esto utiliza la maquinaria --interactive internamente, pero combinarla con la opción --interactive explícita generalmente no es una buena idea a menos que sepa lo que está haciendo (vea FALLOS a continuación)

El bug al que se refiere la documentación se desencadena al reordenar las confirmaciones.