Mercurial: Cómo lidiar con una rama que tiene dos cabezas


¿Qué pasa si una rama tiene dos cabezas? Llegué a esta situación hace semanas por alguna razón no los fusioné en ese entonces y solo continué desarrollándome en una cabeza. Ahora quiero deshacerme de la otra cabeza. ¿Qué debo hacer? ¿Debería fusionarlos después de tantos conjuntos de cambios?

Author: Helgi, 2011-08-03

3 answers

Así que tienes esto:

o--o--o--A--B  <- older unnecessary head
       \
        1--2--3--4--5--6  <- newer ‘good’ head

...y no necesitas A y B, absolutamente, 100% seguro. Si no estás seguro, y hay cosas posiblemente salvables en A y B, es mejor combinar las cabezas para combinar los cambios. Como dijo Aaron, Mercurial es bueno en eso.

Ahora tienes dos opciones:

  • deshacerse de la cabeza vieja, o
  • haga una fusión ficticia de dos cabezas que ignora head B.

Si conjuntos de cambios A y B están presentes en otros repositorios que no controlas , por ejemplo, si otras personas tiraron A y B en sus repositorios, o empujaste A y B a un repositorio público (por ejemplo, Bitbucket), entonces has liberado A y B en el comodín, y no puedes deshacerte de ellos. Usted debe hacer un dummy merge :

$ hg up 6
$ hg --config ui.merge=internal:local merge

Esto ignorará cualquier cambio de A y B al fusionar.

Si, por otro lado, A y B son privadas, puede strip them:

$ hg strip A

(Rev A y descendientes despojados; habilitar la extensión MQ para hacer strip disponible.)

O, haga un nuevo clon de su repositorio sin conjuntos de cambios A y B:

$ hg clone myrepo myrepo2-clone -r 6

(Solo rev 6 y ancestros añadidos al clon.)

 29
Author: Helgi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 10:27:10

Se crea un head si confirma algunos cambios (agregue un conjunto de cambios a un conjunto de cambios existente). Si eso sucede varias veces para el mismo conjunto de cambios, entonces se crean varias cabezas. Esto no es nada inusual o malo.

La solución habitual es fusionarlos. Mercurial es muy bueno en la fusión. Lo más probable es que el resultado aún se compile y ejecute sin ningún trabajo manual.

Simplemente ejecuta hg merge y luego hg status y hg diff para ver qué cambió entre los dos. Si te gusta el resultado, commit se. Si no te gusta, update dirígete a limpiar tu espacio de trabajo.

Para deshacerse de una cabeza, los documentos explican cómo hacerlo.

Usando MQ, también puede convertir la segunda cabeza en una rama independiente (para que pueda mantenerla, pero no le molestará). Vea esta respuesta: ¿Cómo puedo crear una rama para una revisión sin tip en Mercurial?

 6
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:00

Si necesita mantener los cambios en la rama antigua, debe fusionarlos, y no debería ser un problema.

 -3
Author: Axelle Ziegler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-03 14:07:24