2011-05-06 15 views
25

Tengo un repositorio de HG con revoluciones 1, 2, 3, 4, 5 y 6.HG: Deshacer una confirmación de la historia

Cuando cometí rev 4, sin saberlo, una chapuza algunos cambios en Rev3 que no debería tener. No me di cuenta de esto hasta que la versión 6 ya estaba confirmada.

Necesito deshacer los cambios en la versión 4, pero luego volver a aplicar todos los demás cambios después de eso. Básicamente deshacer commit # 4. ¿Cómo puedo hacer eso?

Respuesta

35

¿Quieres hg backout

Revert/deshacer el efecto de una anterior changeset ...

Backout funciona mediante la aplicación de un conjunto de cambios que es lo opuesto del conjunto de cambios que se retiró. Ese nuevo conjunto de cambios está comprometida con el repository, y con el tiempo se fusionó ...

+0

Una vez que uso el retroceso, ¿cómo vuelvo a aplicar los conjuntos de cambios 5 y 6, que se han invertido respectivamente debido a la reversión? Esa es la parte en la que estoy confundido. ¿Algun consejo? –

+0

retroceso crea un nuevo conjunto de cambios después de 5,6 que es efectivamente el inverso de 4. no es necesario volver a aplicar 5 y 6 –

+2

'hg retroceso -r 4' invertirá los cambios realizados en la revisión 4, sin tocar el cambios realizados en las revisiones 5 y 6. El sistema de ayuda proporciona una buena descripción general (http://www.selenic.com/hg/help/backout). –

4

Puede utilizar la extensión MQ:

hg qinit 
hg qimport -r 4:tip 
hg qpop -a 
hg qdelete 4.diff 
hg qpush -a 
hg qfinish -a 

Lo anterior es la forma de reescribir la historia, que es lo que quiere Creo .

También puede usar hg backout pero eso deshace una confirmación en su directorio de trabajo y puede confirmarlo.

+2

Esto es lo que haría * si y solo si * sabía que la última vez que un conjunto de cambios de mi repositorio fue compartido con alguien más fue el conjunto de cambios 3 o anterior. De lo contrario, tendrá un desagradable dolor de cabeza de fusión al introducir nuevas versiones de los mismos cambios en los conjuntos de cambios 4, 5 y 6. –

+0

Eso es un hecho. Reescribir el historial siempre es el último recurso, especialmente cuando lo estás compartiendo. – manojlds

Cuestiones relacionadas