Hay una confirmación que simplemente no funcionó, por lo que quiero abandonarla sin eliminarla de la historia .
He actualizado desde una revisión anterior y me he comprometido, creando así una nueva cabeza.
No tengo sucursales, no quiero sucursales, solo quiero seguir con la nueva cabeza exactamente como está, nada lujoso, sin fusión, sin preocupaciones, simplemente olvidando la anterior.
Parece que no puedo encontrar cómo hacer eso, y estoy empezando a creer que no se puede hacer. Todo lo que encuentro es cosas sobre ramas, o cosas sobre fusión.
Respuestas:
Actualice su repositorio a la cabeza con la revisión que desea olvidar, luego use
hg commit --close-branch
para marcar esa rama (anónima) como cerrada. A continuación, actualice a la cabeza de la rama que no quiere, y seguir trabajando.Aún puede ver la rama cerrada si usa la
-c
opciónhg heads
, pero no se mostrará de manera predeterminada yhg merge
sabrá que no intentará fusionarse con la cabeza cerrada.Tendrá que usar
hg push --force
la primera vez que empuje este cabezal cerrado a otro repositorio ya que en realidad está creando cabezales adicionales en el repositorio remoto cuando empuja. Entonces dile a Mercurial que esto está bien--force
. Las personas que tiran de la cabeza cerrada no se molestarán por ninguna advertencia.fuente
hg heads
... Estoy usando mercurial 1.4.3, ¿es una característica más nueva?hg branches
aún debe mostrar el nombre de la sucursal en la que está. En lugar de intentar cerrar la rama, combine su rama anónima de nuevo en la rama original, descartando todos los cambios.Sé que no quieres trabajar con sucursales en esta etapa, pero eso es exactamente lo que has hecho. Cuando volviste a una versión anterior y cometiste algo que funcionó, creaste una rama, una rama sin nombre, pero una rama de todos modos.
No hay problema con continuar como está y no preocuparse por tener varias cabezas, pero si desea ordenar las cosas para no recoger accidentalmente la cabeza equivocada una vez, puede matar la rama vieja.
Hay una buena sección en la documentación de Mercurial que lo lleva a través de una serie de opciones en torno a Podar ramas muertas .
Creo que la mejor opción para usted es marcar la rama anterior como "cerrada". Si su antigua cabeza es la revisión "123", entonces:
fuente
-C
enhg update
? Parece que ningún archivo se habría modificado, por lo que debería funcionar sin él.En primer lugar, escriba:
Imagina, tienes tres cabezas en la lista:
Digamos que desea mantener activa la última cabeza (223) y cerrar el resto.
Entonces harías lo siguiente:
Cerrar la cabeza # 59
Cerrar la cabeza # 123
Cometer los cambios
No olvides cambiar a la cabeza derecha al final
Y tu estas listo.
fuente
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
antes de hacer cualquier cambio.hg push --force
, no solohg push
para superar la advertencia sobre empujar varias cabezas.hg push
por sí solo no funcionó para mí. ¿Cómo recomienda empujar los cambios a un repositorio externo si se niega debido a múltiples cabezas?Que desea utilizar
hg backout
. Esto elimina los cambios realizados por el conjunto de cambios de cualquier conjunto de cambios secundario.Mira esto para una buena explicación. Retroceso mercurial
fuente
Las respuestas de Niall y Nick son directas. Como me encuentro creando muchas cabezas colgantes, terminé escribiendo un alias para cerrar las cabezas más fácilmente. Al agregar esto a su
.hgrc
:(si ya tiene una
[alias]
sección, puede agregarla en su lugar)Ahora puede cerrar una cabeza en un solo comando (y sin tener que actualizar manualmente a un conjunto de cambios diferente) de esta manera:
Nota: el alias aprovecha el hecho de que los alias Mercuriales pueden ser comandos de shell . Esto significa que esto probablemente solo funcionará en UNIX, no en Windows.
fuente
Una alternativa para cerrar o despojar la rama no deseada sería fusionarla de una manera que descarte totalmente sus efectos, pero la deje en la historia. Este enfoque permitirá que esos cambios no deseados se propaguen en un impulso, así que solo use esto si ese es el efecto deseado.
Digamos que el historial del conjunto de cambios se ve así:
y es
5
y6
que ya no se quieren.Puedes hacerlo:
que creará esto:
La actualización
8
asegura que está trabajando en la cabeza deseada en la historia, que desea mantener.El le
-t :local
indica a hg que use la "herramienta" de fusión llamada local que le dice que ignore los cambios de la otra rama, es decir, la que NO está representada por el estado actual de la carpeta de trabajo. Más información .Por lo tanto, los cambios no deseados
5
y6
se conservan en la historia, pero no afectan a nada más reciente.fuente
Este es un caso de uso para la extensión Evolve . Actualmente no está incluido con Mercurial, por lo que técnicamente es una extensión de terceros. Pero está siendo muy utilizado por muchas personas, incluidos los desarrolladores de Mercurial, se está desarrollando de manera muy activa y no va a ninguna parte.
Con la extensión Evolve, simplemente lo haces
y sigue con tu vida. El cset todavía estará allí, pero obsoleto. No será visible a menos que pase la
--hidden
opción a los comandos de Mercurial, y por defecto no se enviará a repositorios remotos. Aunque creo que puedes forzarlo si realmente quieres.Si el cset que está podando tiene ancestros que desea conservar, entonces deberá ejecutar
hg evolve
para volver a crear los conjuntos de cambios.hg evolve
lo hará de forma automática. De lo contrario, no tienes que hacer nada.fuente
Puede clonar su repositorio corrupto en uno nuevo sin clonar esa cabeza no deseada. Luego, elimine el repositorio antiguo, mueva el clon recién creado al lugar original y continúe trabajando con él. Esto llevará algún tiempo, pero obtendrá un repositorio perfectamente limpio sin una señal de esa revisión no deseada.
fuente
Me he encontrado con este problema muchas veces cuando quiero decapitar una cabeza que se creó por error. Siempre quiero verlo desaparecer de la faz de la Tierra.
En su copia local, obtenga la última versión y luego:
Encuentre el comienzo de una cabeza que desea quitar (donde un nuevo cuello comienza a ramificarse), obtenga el número de revisión
Desnúdalo.
Fuente: TipsAndTricks .
Fuente: PruningDeadBranches # Using_strip .
Su repositorio ahora debería tener la cabeza desnuda. El último paso es importante ya que la eliminación no crea ningún cambio que pueda empujar a su repositorio central. Sin el último paso, solo ha despojado la cabeza localmente.
fuente