Git: Efecto del restablecimiento: difícil en la fusión futura

Accidentalmente cometimos sha XXX en la twig A en lugar de B.

A: VVV-WWW-XXX B: VVV-WWW 

Entonces, seguiremos la guía sobre SO para mover la confirmación de A a B:

 git checkout B git merge A git checkout A git reset --hard HEAD~1 git push --force 

Eso nos llevará a:

 A: VVV-WWW B: VVV-WWW-XXX 

Si luego cometemos YYY en la twig A dándonos:

 A: VVV-WWW-YYY B: VVV-WWW-XXX 

Y fusionar eso en B ¿fusionará limpiamente YYY en B mientras no se revierte XXX en B debido al hecho de que XXX se reset --hard previamente en A? Lo que queremos después de la fusión es:

 A: VVV-WWW-YYY B: VVV-WWW-XXX-YYY 

Estoy luchando con el efecto de reset --hard en el comportamiento de fusión. Creo que el reinicio elimina el historial de la confirmación, por lo que la fusión funcionaría sin intentar eliminar XXX de B.

El resultado de la fusión será

  (A) VVV --- WWW --- YYY \ \ (B) --- XXX --- ZZZ 

Donde ZZZ se fusiona comete cuyos padres son XXX y YYY. Las letras individuales entre paréntesis representan refs o nombres de twigs, que son meras señales a lo largo del path en un gráfico de historial.

Como se representa con git lola (un práctico alias para git log --graph --decorate --pretty=oneline --abbrev-commit --all )

 * 78d2930 (HEAD -> B) ZZZ |\ | * 549c09e (A) YYY * | f585976 XXX |/ * 537d898 WWW * 875611c VVV 

Usé los posts de confirmación arriba para vincular el historial en su pregunta. Sus nombres de object SHA-1 diferirán de los anteriores.

No lo pienses demasiado. Tenga en count que git almacena instantáneas de estados de tree, y el pedigrí histórico proviene de los objects de confirmación. Usando la herramienta nítida git reset --hard elimina la historia como si nunca hubiera ocurrido sin dejar rastros.

Como cualquier herramienta afilada, git reset --hard puede cortarte si no tienes cuidado. Piénsalo como rm -rf .

reset simplemente mueve el HEAD / puntero de twig a otro commit. No tendrá ningún efecto en el repository ni en ninguna operación futura.

Tiene razón en que las fusiones futuras funcionarán exactamente igual independientemente de si hizo una confirmación o no.