2010-03-01 9 views

Respuesta

4

No, los nombres de las sucursales son parte del conjunto de cambios (es realmente como una etiqueta que agrega a la confirmación), significa que el hash del conjunto de cambios se deja en el nombre de la rama.

De modo que la única forma de cambiarlo retroactivamente es reescribiendo el historial (lo que no funciona bien si realiza los cambios en otro lugar, ya que tendrá que volver a escribir cada repositorio que tenga los cambios).

Para reescribir el historial, puede usar, por ejemplo, mq.

0

No es una solución completa pero, sin volver a escribir el historial; podría etiquetar el último conjunto de cambios en la rama sin nombre. Si nunca vuelve a cambiar de esta, la etiqueta debería navegar. Si necesita volver a cambiar de dirección, puede pasar a una rama con nombre después del conjunto de cambios etiquetados.

14

Solo quería hacer esto, y aquí está la solución que encontré. Ha pasado un año desde que se formuló originalmente la pregunta, esto podría explicar por qué ahora puedo encontrar una solución. Tiene la desventaja de que crea una revisión adicional en el proceso, pero esto no fue tan malo para mí.

Primero, vuelve al lugar donde desea crear la rama. En mi caso, en realidad quería comenzar una nueva raíz (porque no era muy sensato cuando comencé el repositorio, pero de todos modos), así que estoy actualizando a nulo. Es probable que desee comenzar en otro lugar, depende de su situación.

$ hg update null 

A continuación, cree la rama.

$ hg branch blah 
$ hg commit -m "Created blah branch." 

Entonces, nos rebase todas las confirmaciones que hemos hecho en nuestra nueva sucursal:

$ hg rebase -s SOURCE -d DEST 

El FUENTE aquí debe ser el primer commit que ha hecho en las confirmaciones que desea crear la rama de, y el DEST debe ser el compromiso donde se creó la rama (la que cometimos anteriormente).

+1

Gracias, funcionó a la perfección. Esta debería ser la respuesta aceptada. –

+1

Esto funciona (creo), pero tiene el problema potencial de que no funciona bien si has compartido tu repositorio con alguien (como lo señala indirectamente @tonfa). Como señala [extensión de rebase] (http://mercurial.selenic.com/wiki/RebaseExtension), _No debe volver a establecer los conjuntos de cambios que ya se han compartido con otros. Hacerlo obligará a todos los demás a realizar el mismo rebase_ –

+0

Para aquellos que trabajan en mercurial hg, debes habilitar la extensión de rebase en Configuración. – amaidment

Cuestiones relacionadas