Estoy usando Mercurial y me he metido en un lío terrible a nivel local, con tres cabezas. No puedo presionar, y solo quiero eliminar todos mis cambios y confirmaciones locales y comenzar de nuevo con un código totalmente limpio y un historial limpio.
En otras palabras, quiero terminar con (a) exactamente el mismo código localmente que existe en la punta de la rama remota y (b) sin historial de confirmaciones locales.
Sé que hg update -Csobrescribe los cambios locales. Pero, ¿cómo elimino las confirmaciones locales?
Para ser claros, no tengo ningún interés en preservar el trabajo que he realizado a nivel local. Solo quiero la forma más sencilla de volver a una caja local totalmente limpia.
version-control
mercurial
dvcs
head
Ricardo
fuente
fuente

Respuestas:
Cuando la forma más simple (una nueva
hg clone) no es práctica, usohg strip:Repita hasta que se
hg outgoingquede quieto. Tenga en cuenta quehg strip $revborra$revy todos sus descendientes.Tenga en cuenta que es posible que primero
stripdeba habilitarlo en la configuración de Mercurial .PD: un enfoque aún más inteligente es usar el lenguaje revset y hacer:
fuente
hg strip 'roots(outgoing())'ir al trabajo debido a que no lo reconoce'roots(outgoing())'. Pude hacer que funcionarahg strip "roots(outgoing())".cmd.exe, sí.Querrá hacer un clon local en el que conserve solo los conjuntos de cambios que también están presentes en el repositorio remoto. Use TortoiseHg ,
hg logo similar para averiguar cuál de sus revisiones es la última revisión que no hizo (la anterior a que comenzara el desorden). Utilizandohg outgoingpuede ayudar aquí, enumerará todos los conjuntos de cambios que realizó, elija un número de revisión anterior a cualquiera de esos.Si se llama a la revisión de destino y se llama a
goodsu clonfoo, haga lo siguiente:Esta será una operación local rápida; no hay razón para descargar todo de nuevo . El
foo-cleanclon solo contendrá conjuntos de cambios hasta la revisióngood. Ahora puede reemplazarfoo-clean/.hg/hgrcconfoo/.hg/hgrcpara preservar la configuración local del repositorio, como la ruta push / pull predeterminada.Cuando esté satisfecho de que
foo-cleantiene todo lo que necesitafoo, simplemente eliminefooy cambie el nombrefoo-cleanafoo. Haga unahg pullpara obtener nuevos conjuntos de cambios del repositorio remoto en su clon y continúe como de costumbre.Si nadie ha enviado nuevos conjuntos de cambios al repositorio remoto, entonces es muy simple determinar qué revisión desea usar como se indica
goodarriba:hg id defaultle dirá el ID de la sugerencia en el repositorio remoto.fuente
hg pull -rpara la última revisión "buena" de cada rama adicional.Okay. Así que simplemente elimine todo el material local,
hg initel nuevo repositorio local yhg pullel último consejo que tenga. No te olvides dehg updatedespués de esto.fuente
hg init+hg pull=hg cloneLa diferencia es quehg clonehace un buen.hg/hgrcarchivo para usted yhg cloneusará enlaces duros para ahorrar espacio al clonar en el mismo sistema de archivos.hg help initestá aquí: selenic.com/mercurial/hg.1.html#init ¿ Pero quizás eso es demasiado conciso? Envíe un correo a nuestra lista de correo si necesita más ayuda. Ver: mercurial.selenic.com/wiki/MailingListsPuedes utilizar
para matar cualquier revisión y su subárbol en su repositorio local.
https://www.mercurial-scm.org/wiki/Strip
Pero no intente usarlo para nada que ya haya sido promocionado.
fuente
Simplemente elimine todo lo que tenga en su sistema local y vuelva a clonar el repositorio remoto.
fuente
hg strip `hg out --template" {rev} {autor} \ n "| grep YOUR_AUTHOR_NAME | cortar -d "" -f 1`hace el truco por mí.
Elimina todas las revisiones que no se envían al repositorio predeterminado que se crean con su nombre de autor.
También puede utilizar este estilo para que no se verifique con el repositorio predeterminado sino con otro repositorio.
hg strip `hg out OTHER_REPO_ALIAS --template" {rev} {autor} \ n "| grep YOUR_AUTHOR_NAME | cortar -d "" -f 1`fuente
Si está utilizando TortoiseHg, una forma sencilla de salir de un (pequeño) lío es actualizar primero a la última revisión, luego seleccionar sus conjuntos de cambios e iniciar "fusionar con local". Cuando aparezca el diálogo de combinación, simplemente haga clic en el pequeño icono '+' para revelar algunas opciones adicionales, una de las cuales es "descartar conjuntos de cambios de la revisión de destino de combinación (otra)". Hacer esto significará que sus conjuntos de cambios seguirán estando en el repositorio y serán empujados, pero no tendrán ningún efecto, porque se descartarán en la fusión. Si tiene muchos conjuntos de cambios que abarcan muchas cabezas, es posible que no desee contaminar el repositorio de esta manera, pero es una solución simple y vale la pena considerar si los conjuntos de cambios que está descartando contienen datos a los que más adelante querrá hacer referencia.
fuente