Cambiar un error menor en un compromiso anterior en git

¿Cuál es la mejor manera de corregir un error menor, un error tipográfico, por ejemplo, en un compromiso más antiguo en lugar de hacer un nuevo compromiso que lo corrige? No quiero estropear la historia con muchas confirmaciones de "arreglo de errores". Todavía no he llevado los commits a nadie.

Digamos en este senario, quiero corregir un error de código en la confirmación del 15 de enero y mantener los otros 2 commits también.

commit 826da06f085664298164a4bfc9994cad109c59f8 Author: Me Date: Tue Jan 17 18:48:12 2012 +0800 feature 3 working commit d816dd97a207add63d31958c3ffba84b65681810 Author: Me Date: Tue Jan 16 17:47:29 2012 +0800 feature 2 working commit 972ded30c20692cb74ae07d0c941c43022c905bd Author: Me Date: Thu Jan 15 08:48:40 2012 +0800 feature 1 working 

 rebase -i <sha of commit PRIOR to the one you want to change> 

a continuación, select qué compromiso (s) que desea cambiar, eliminar, etc.

Yo uso el siguiente escenario.

  1. Corrige un error menor
  2. Confirma la solución
  3. git rebase -i HEAD ^ 4

Esto abre un editor vim (probablemente) con un text siguiente

 pick 972ded feature 1 working pick d816dd feature 2 working pick 826da0 feature 3 working pick xxxxxx fix feature 1 

cambiar esto a

 pick 972ded feature 1 working f xxxxxx fix feature 1 pick d816dd feature 2 working pick 826da0 feature 3 working 

Tenga en count que muevo la opción "corregir la function 1" a la segunda línea y cambio la selección a f . Esto le dice a git que combine la function "function 1 que funciona" y "arregle la function 1" con una confirmación única con un post de confirmación del primero (es decir, "function 1 funcionando").

"Característica 2 funcionando" y "Característica 3 funcionando" confirma que Git se deja "intacto". (De hecho, se aplica esto se compromete a una nueva historia anterior. Por lo tanto, obtendrán nuevos identificadores)

 git rebase -i HEAD~3 

es lo que querrías hacer Usted es el autor de los 3 commits y si no lo empujó ya en algún lugar, entonces creo que está bien proceder. En cualquier otro caso, recomendaría no realizar la acción.

Vea esta buena página para detalles

Mi forma preferida es crear una nueva twig a partir de esa confirmación problemática. Se corrigieron los problemas en esa nueva twig y se confirmó. Luego, combine esta nueva twig con la twig original. No estoy seguro de si esto es lo que quieres.