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.