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.