Editar una fusión de commit con git rebase

En Git cuando tengo compromisos, por ej. A - B - C y yo queremos editar el compromiso B , I

  • use git rebase -i <A-commit-hash> ,
  • en la list escribo el command edit delante de B commit,
  • git rebase se detiene justo después de que B commit para que pueda arreglar todo lo que quiero usando git commit --amend ,
  • y luego sigo usando git rebase --continue .

Hasta donde yo sé, esta es la mejor práctica de cómo hacer esto. Con este método puedo editar cualquier confirmación en el pasado (siempre y cuando no se haya enviado a la twig remota) y, además, con -p flag, puedo incluso conservar las fusiones. Esto es simplemente genial.

Mi problema actual es: cometí un error (error ortográfico) en una línea en una combinación de fusión (mientras resolvía un conflicto al fusionar dos twigs).

Me gustaría solucionarlo, pero no sé cómo hacer que git rebase detenga en un commit de fusión. La list git rebase -p -i <blah> ignora las git rebase -p -i <blah> fusión, por lo que no puedo escribir el command de edit delante de él y hacer que la git rebase detenga allí para permitirme editarla.

¿Alguna ayuda, por favor? Solo quiero corregir esta línea en la confirmación de fusión mientras conserva todas las confirmaciones (y fusiones) después de ella.

Gracias.

Git no hace que sea fácil hacer rebases interactivos cuando se trata de fusiones. La opción -p usa el mecanismo -i internamente, por lo que mezclar los dos realmente no funciona.

Sin embargo, git rebase es solo una forma automática de hacer muchas selects de cereza. Puede replicar su comportamiento seleccionando manualmente para get un poco más de control sobre el process. Es less conveniente y más propenso a los errores humanos, pero es posible.

Este es el enfoque que sugiero:

  1. use git rebase para llegar a la confirmación después de la combinación (el hijo de la fusión)
  2. use git reset --hard HEAD^ para llegar manualmente a la fusión
  3. use git commit --amend para reparar la fusión
  4. usa git cherry-pick para volver a la confirmación después de la fusión
  5. use git rebase --continue para terminar

Estos son los pasos específicos:

  1. Tenga en count la ID SHA1 de la confirmación de combinación que desea modificar. Para discusión, supongamos que es deadbeef .
  2. Tenga en count la ID de SHA1 de la confirmación justo después de la confirmación de combinación que desea modificar (el elemento secundario de la combinación de fusión). Supongamos que es facef00d .
  3. Ejecute git rebase -i deadbeef .
  4. Seleccione facef00d para editar.
  5. Cuando rebase lo devuelve a un indicador para editar facef00d , ejecute git reset --hard HEAD^ . Ahora debería estar en deadbeef ( git rev-parse HEAD debe imprimir deadbeef ).
  6. Realice sus ediciones para corregir el conflicto de fusión incorrecto y use git add para ponerlas en escena.
  7. Ejecutar git commit --amend para fusionar el arreglo por etapas con la mala combinación de commit. El resultado ahora tendrá un SHA1 diferente (no deadbeef ).
  8. Ejecute git cherry-pick facef00d para aplicar los cambios realizados por facef00d a la confirmación de combinación fija.
  9. Ejecute git rebase --continue para terminar.

Puede ser más fácil crear un commit de confirmación 'D' luego usar ' git rebase -p -i <blah> ' para reorderar 'D' justo después de 'B' y aplastarlo en 'B'.

 pick A pick B <- merge commit to ammend fixup D pick C