Rebase interactivo de la twig fusionada

Estoy usando git y estoy llegando a este estado:

X --- Y --------- M1 -------- M2 (my-feature) / / / / / / a --- b --- c --- d --- e --- f (stable) 

Esto sucede cuando trabajamos en la twig 'my-feature' por más de un día. M1 y M2 se fusionan desde la twig estable a la twig de características. M1 y M2 pueden haber fusionado conflictos que se han resuelto. La idea de fusionar la twig estable en la twig de características es manejar los conflictos más pronto que tarde.

Una vez que la function esté completa, queremos volver a establecer la base de la twig de características en uno o dos commits.

El problema es que cuando hacemos rebase interactiva, git nos muestra los mismos conflictos de fusión que ya resolvemos durante las fusiones M1 y M2.

¿Hay alguna manera de hacer que Git reutilice la decisión de fusión que ya hicimos en M1 y M2?

Si los conflictos de fusión son idénticos, este es un caso de uso perfecto para git rerere , uno de los commands más útiles (aunque less conocidos) en git. De las páginas man:

En un flujo de trabajo que emplea twigs temáticas relativamente longevas, el desarrollador a veces necesita resolver los mismos conflictos una y otra vez hasta que las twigs del tema se hayan completado (ya sea fusionadas a la twig "release", o enviadas y aceptadas en upstream).

Este command ayuda al desarrollador en este process al registrar los resultados automotrices en conflicto y los correspondientes resultados de resolución de mano en la fusión manual inicial, y aplicando resoluciones de mano grabadas previamente a sus correspondientes resultados automotrices.

git rerere mantiene un logging de las resoluciones de conflictos y las aplica automáticamente cuando se encuentra con el mismo conflicto en git merge , git rebase o git commit (cuando se comete una combinación). Scott Chacon publicó buenos ejemplos aquí, y la página del hombre también vale la pena leerla.

Puede habilitar git rerere en merge y rebase al emitir este command:

 git config --global rerere.enabled true 

Elimine el indicador --global si desea que la opción esté habilitada solo para un único repository.

 git rebase --interactive --preserve-merges

Una forma explícita de hacer que una característica de twig de feature en una nueva feature-one-commit con una única confirmación:

 git checkout -b feature-one-commit \ "$(git commit-tree HEAD^{tree} -m "Commit message" -p master)" 

Siempre puedes forzarlo usando la bandera -f