Deshacer una resolución de git rerere que se hizo en una rebase
git-rebase git-rerere (1)
Bien, realmente me gusta el comando git rerere. Sin embargo, no lo he usado mucho más que dejar que grabe mis conflictos automáticamente y los resuelva por mí. Sin embargo, desordené una de mis resoluciones de conflicto durante una rebase bastante grande (rebasando una rama de características realmente obsoleta con la última versión).
feature -> a - b - c - d
release -> e - f - g - h
rebase/feature -> e - f - g - h - a'' - b'' - c'' - d''
Entonces, digamos, por ejemplo, que b ''tiene una fusión incorrecta (¡gracias a mí!), Y quiero volver a grabarla. ¿Cómo lo haría? He visto la opción git checkout --conflict, mencionada en Rerere Your Boat , pero no tengo muy claro cómo funciona y si se aplica aquí. ¿Tal vez tengo que verificar el estado de conflicto de fusión y ejecutar git rerere una vez que resuelvo correctamente este conflicto?
Normalmente, me limitaría a comprometerme con la punta de la rama de rebase, pero es un tiro. Solo estoy tratando de manejar los conflictos antes de tiempo, de modo que cuando sincronizo con ese equipo de características, minimizamos el tiempo que lleva. ¿Tener sentido?
Para eliminar simplemente todas las resoluciones anteriores, ejecute rm -rf .git/rr-cache
para eliminar la caché.
Para una combinación específica, puede decirle a rerere
que olvide la resolución grabada volviendo a ejecutar la combinación y permitiendo que rerere
aplique su resolución grabada en el árbol de trabajo.
Puedes revisar a a''
y luego hacer un git merge b
para volver a esa situación (probablemente estarás en un checkout de una cabeza separada ya que especificaste el hash de confirmación de a''
, así que ten en cuenta que no estás en una rama).
Luego use git rerere forget FILE-WITH-BAD-MERGE
donde debe especificar el archivo cuya resolución de conflicto grabada debe olvidarse.
forget <pathspec>
Restablecer las resoluciones de conflicto que rerere ha registrado para el conflicto actual en.