2010-04-03 12 views
95

Soy nuevo en la colaboración con Mercurial. Mi situación:¿Cómo abandonar una fusión de hg?

  • Otro programador cambió la versión 1 de un archivo para reemplazar las sangrías de 4 espacios con la sangría de 2 espacios. (Es decir, cambió cada línea.) Llame a esa revolución 2, empujada al repositorio remoto.
  • He cometido cambios sustanciales rev 1 con varios cambios de código en mi área de trabajo local. Llamar a ese rev 3.
  • Tengo hg pull ed y hg merge d sin una idea clara de lo que estaba pasando.
  • Los conflictos son innumerables y no son realmente sustantivos.

Así que realmente me gustaría haber cambiado mi repo local a sangrías de 2 espacios antes de fusionarme; entonces la fusión será trivial (supongo). Pero parece que no puedo respaldarlo. Creo que necesito hg update -r 3 pero dice abort: outstanding uncommitted merges.

¿Cómo puedo deshacer la fusión, cambiar el espacio en mi repositorio local y volver a abrir?

Respuesta

97

Puede descartar los cambios no comprometidos con el grupo -C (o --clean) Bandera:

hg update -C -r 3 

CUIDADO: Todo lo que no fue confirmado se ha ido!

Después de eso, probablemente debería utilizar algún tipo de herramienta de formateo de código para realizar toda la operación, o al menos algunos buscar y reemplazar con expresiones regulares. Algo tan simple como reemplazar lo que coincide con ^____ (use 4 espacios en vez de guiones bajos) con __ (2 espacios), repetido algunas veces (a menos que tenga algún código anidado insano) debería funcionar.

+0

Oh, gracias. Debes haber respondido bien cuando lo descubrí por mi cuenta. Estoy en emacs, por lo que 'M-x indent-region' hizo el truco reindent. – Grumdrig

+4

Merece la pena señalar que los archivos sin seguimiento no se eliminarán. – djsutho

1

Aparentemente solo necesitaba hg update -C -r 3, que sobrescribe mis archivos locales con la revolución en mente (que es lo que pensé que hg update haría, pero estaba equivocado.) ¡Gracias por mi ayuda!

+2

Agregar '-C' o' --clean' es cómo le dices a Mercurial que siga adelante, incluso cuando arrojará algunos archivos modificados. Tienes razón en que 'hg update -r X' normalmente te llevará a la revisión X, pero cuando estás en una fusión necesitas insistir un poco más :-) –

+7

Creo que" hg revert --all --cancelmerge "Sería mucho más intuitivo. –

98

Por cierto: si sólo revertir la fusión que hizo y 3 no es su número de revisión se puede hacer esto:

hg update -C -r . 
+16

Para alguien como yo que al principio no entendió cómo funciona esto: el punto '.' es un atajo a la revisión anterior. –

+1

¡excelente respuesta! debería ser mejor –

+1

@Thymine: de 'hg help update' Obtengo: * Si no se especifica ningún conjunto de cambios, actualice a la punta de la rama denominada actual ... * y tip puede no ser siempre su revisión actual en la que está trabajando. No lo probé, hasta ahora ... – math

17

para deshacer una fusión no comprometida, utilice

hg update --clean 

que comprobará una copia limpia del padre de combinación original, perdiendo todos los cambios.

Cuestiones relacionadas