El flujo de trabajo de Git se compromete con cualquiera de las dos revisiones anteriores

Tengo un flujo de trabajo en el momento en el que estoy trabajando en un error y los cambios que hago son de dos types:

  • Mejorando el logging y las afirmaciones para tratar de investigar el error, pero sin afectar la lógica (a pesar de los Heisenbugs )
  • Cambios de lógica que intentan arreglar el error

Inicialmente agregué un poco de logging y lo comprometí como revisión A. Luego realizo algunos cambios lógicos que van hacia arreglar el error y confirmarlo como la revisión B. Ahora entiendo un poco más sobre el error y así puedo agregar un poco más de logging.

Mi pregunta es, ¿cómo puedo agregar esos controles extra a la revisión A? En última instancia, quiero terminar con dos compromisos: el primero es solo el diagnóstico adicional y el problema está en el segundo. Supongo que la funcionalidad es un poco como "modificar la confirmación previa", pero quiero que se aplique a una confirmación más antigua, no la última.

Puedo ver que probablemente podría hacer esto creando una twig de la revisión A y confirmando el nuevo cambio allí, luego aplicaré la revisión B y, por lo tanto, algún tipo de aplastamiento. ¿Hay alguna forma más simple?

Estoy usando git-svn , pero me imagino que la solución sería una git

Si aún no ha enviado sus cambios al repository de subversión, puede hacer una rebase interactiva.

 git rebase -i <commit before your changes> # define order you want commits to appear # optionally merge commits by replacing 'pick' with 'squash'/'s' or 'fixup'/'f' # save and exit editor # make sure resulting history is correct 

Esto cambia el historial, por lo que nunca deberías hacerlo en el historial publicado. Y NUNCA SIEMPRE con historia escrita en el repository de subversión (¡su próximo compromiso será terriblemente incorrecto!). También tenga cuidado de no perder ningún cambio o compromiso.