¿Cómo debo gestionar "revertir" una twig hecha con marcadores en mercurial?

Tengo un proyecto de código abierto en bitbucket. Recientemente, he estado trabajando en una twig experimental que, por alguna razón, no constituía una twig real. En cambio, lo que hice fue usar marcadores.

Así que hice dos marcadores en la misma revisión

  • testing: el nuevo código en el que trabajé ahora debería abandonarse (debido a una falla en el experimento)
  • main – el viejo código estable que funciona

Trabajé en testing También empujé desde la testing a mi server, que terminó cambiando la label de tip al nuevo código inestable, cuando realmente preferiría que se quedara en main. "Cambié" de nuevo al marcador principal haciendo una hg update main y luego realizando un cambio insignificante. Entonces, presioné esto con hg push -f y ahora mi control de fuente es "correcto" en el server.

Sé que debe haber una manera más limpia de "cambiar" las sucursales. ¿Qué debería hacer en el futuro para este tipo de operación?

tip no es un concepto ampliamente útil en un repository que tiene twigs de ningún tipo. Ya sea que use marcadores, twigs con nombre o sucursales anónimas, la tip siempre significa la confirmación más reciente en cualquier sucursal, que raramente es algo que le preocupa. La verdadera solución a su problema es dejar de preocuparse por la tip .

Realmente no entiendo su pregunta, ya que está cambiando twigs (sin comillas), incluso si no se nombran twigs, todavía son twigs cuando utiliza marcadores.

El error que cometiste fue un error honesto y no veo forma de que Mercurial te proteja de hacer eso de nuevo con marcadores (marcando el mismo rev con marcadores diferentes y cometiendo el error). Sin embargo, lo que puedo decirte es cómo hacer una bifurcación local privada con Mercurial , y de esta manera puedes evitar tener las consecuencias que acabas de tener:

Usas twigs y fases con nombre

Las Fases Mercuriales son realmente dulces, permítanme explicarlas muy rápido. Puede marcar revisiones a tres estados especiales llamados fases, y estos son: secreto, borrador y público.

  1. secreto : no te empujen Se puede modificar a través de la edición de historial.
  2. borrador : ser empujado. Se puede modificar a través de la edición de historial. Este es el estado pnetworkingeterminado de cualquier revisión.
  3. público : ser empujado. Emitirá una advertencia cuando use extensiones de edición de historial en ellas (strip, rebase, histedit, …).

Como se mencionó, todas las revisiones locales son borradores por defecto, cuando las presionas, se hacen públicas . Puedes usar el command hg phase para marcar revisiones a una fase particular, pero si pasas de # 3 a # 2, o de # 2 a # 1 (de acuerdo con la numeración anterior), necesitas el argumento -f para forzar el cambio, esto es:

secreto -> borrador -> público

Para ir a la izquierda necesita usar –force o -f.

Aquí está lo que haces:

 hg branch experiment hg commit -m "Opening experimental branch" //say this creates revision 123 hg phase -sf tip //s is for secret, f is for force //... hack hack hack hg commit -m "Uh oh screwed up here" hg push //no secret revisions are pushed 

Ahora, puedes abandonar esa twig y dejarla así, nunca será empujada. Olvídalo e incluso simplemente ciérralo para que no te moleste cuando incluyas tus twigs. No se presionará, no aparecerá en la list, así que no se preocupe.

Sin embargo, si tiene OCD, simplemente pele ( hg strip ) la twig en la confirmación donde se abrió la twig, y ​​se ha ido:

 hg strip 123 

Si tiene una sucursal ya existente, puede eliminar varias revisiones a la vez de la siguiente manera:

 hg phase <start revision>::<end revision> -sf 

Para hacer un borrador de su twig secreta o público, simplemente realice la última revisión de fases:

 hg phase -d tip //assuming you are in the experiment branch 

Luego empuje, y la twig se hará pública.

Mercurial ha ido mejorando cada vez más en la modificación de la historia sin cambiar su filosofía general de desalentar precisamente eso. Las fases están destinadas a protegerlo de la modificación accidental de la historia, así como de compartir lo que no quiere decir.

Cómo * I * usa marcadores

Personalmente, utilizo marcadores para la debugging y para cuando quiero probar dos forms diferentes de hacer una cosa. Para mí, los marcadores son útiles cuando quieres hacer twigs anónimas (actualizar a una revisión anterior, confirmar y bifurcar el historial) pero quieres que todo sea inteligible.