Mercurial move cambia a una nueva rama


Tengo una serie de cambios que he enviado a mi repositorio local, pero aún no se han enviado. Dado que en una característica está tomando más tiempo de lo esperado, quiero intercambiar estos cambios en una rama con nombre antes de empujar. ¿Cómo puedo hacer esto?

Author: Casebash, 2011-01-12

4 answers

Como sugiere Mark, el MqExtension es una solución para su problema. En mi humilde opinión, un flujo de trabajo más sencillo es usar la extensión rebase . Supongamos que usted tiene una historia como esta:

@  changeset:   2:81b92083cb1d
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   1:8bdc4508ac7b
|  summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

Esto significa que la revisión 0 es la base sobre la que comenzó a trabajar en su característica. Ahora quieres tener revisiones 1-2 en una rama con nombre, digamos my-feature. Actualizar a la revisión 0 y crear esa rama:

$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"

La historia ahora se ve como esto:

@  changeset:   3:b5939750b911
|  branch:      my-feature
|  tag:         tip
|  parent:      0:d554afd54164
|  summary:     start new branch my-feature
|
| o  changeset:   2:81b92083cb1d
| |  summary:     my new feature: edit file a
| |
| o  changeset:   1:8bdc4508ac7b
|/   summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

Use el comando rebase para mover revisiones 1-2 a la revisión 3:

$ hg rebase -s 1 -d 3

Esto resulta en el siguiente gráfico:

@  changeset:   3:88a90f9bbde7
|  branch:      my-feature
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   2:38f5adf2cf4b
|  branch:      my-feature
|  summary:     my new feature: add file b
|
o  changeset:   1:b5939750b911
|  branch:      my-feature
|  summary:     start new branch my-feature
|
o  changeset:   0:d554afd54164
   summary:     initial

Eso es todo .. como se mencionó en los comentarios a la respuesta de Mark, moverse alrededor de los conjuntos de cambios ya empujados generalmente es una mala idea, a menos que trabaje en un equipo pequeño donde pueda comunicarse y hacer cumplir su manipulación de la historia.

 148
Author: Oben Sonne,
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-09-25 08:33:58

Puede utilizar el MqExtension. Digamos que los conjuntos de cambios a mover son las revisiones 1-3:

hg qimport -r 1:3    # convert revisions to patches
hg qpop -a           # remove all them from history
hg branch new        # start a new branch
hg qpush -a          # push them all back into history
hg qfin -a           # finalize the patches
 30
Author: Mark Tolonen,
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:24:49

Prefiero la solución de parche describe aquí por Mark Tolonen

Lo que tengo:

hg log -G

#default branch
@  changeset:   3:cb292fcdbde1
|
o  changeset:   2:e746dceba503
|
o  changeset:   1:2d50c7ab6b8f
|
o  changeset:   0:c22be856358b

Lo que quiero:

  @  changeset:   3:0e85ae268e35
  |  branch:      feature/my_feature
  |
  o  changeset:   2:1450cb9ec349
  |  branch:      feature/my_feature
  |
  o  changeset:   1:7b9836f25f28
  |  branch:      feature/my_feature
  |
 /
|
o  changeset:   0:c22be856358b

Los mercuriales mandan:

hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff

Aquí está el estado de mi repositorio local

@  changeset:   6:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   5:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   4:7b9836f25f28
|  branch:      feature/my_feature
|
| o  changeset:   3:cb292fcdbde1
| |
| o  changeset:   2:e746dceba503
| |
| o  changeset:   1:2d50c7ab6b8f
|/
|
o  changeset:   0:c22be856358b

Ahora necesito eliminar las revisiones 1 2 y 3 de mi rama predeterminada. Puede hacer esto con el comando strip desde la extensión de mq. hg strip elimina el conjunto de cambios y todos sus descendientes del repositorio.

Habilitar la extensión añadiendo las siguientes líneas a su archivo de configuración (.hgrc o Mercurial.ini):

vim ~/.hgrc y añadir :

[extensions]
mq =

Y ahora elimine este repositorio en la revisión 1.

hg strip 1

Y aquí estamos

@  changeset:   3:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   2:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   1:7b9836f25f28
|  branch:      feature/my_feature
|
o  changeset:   0:c22be856358b

Nota: los conjuntos de cambios son diferentes pero las revisiones son las mismas

 9
Author: Guillaume Vincent,
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:18:15

Para aquellos inclinados a usar GUI

  1. Ir a Tortoise Hg -> File -> Settings luego marque rebase.

introduzca la descripción de la imagen aquí

  1. Reiniciar interfaz de usuario de tortuga

  2. Crea una nueva rama donde moverás los cambios. Haga clic en nombre de la rama actual - > elegir Open a new named branch - > elegir nombre de la rama.

introduzca la descripción de la imagen aquí

  1. Si los cambios que desea mover no se han realizado public (por ejemplo draft) vaya a 5. (Si los cambios ya se ha publicado y usted no es un dev senior usted debe hablar con alguien mayor (obtener un chivo expiatorio) ya que podría arruinar las cosas a lo grande, no tomo ninguna responsabilidad:)).

Ir a View -> Show Console (o Ctrl + L) luego escriba en console hg phase -f -d 2 - donde 2 es la revisión más baja, se moverá a una nueva rama.

  1. Vaya a rama y revisión (debe ser la revisión superior si está moviendo los cambios a la nueva rama creada en el paso 3.) Right Mouse -> Update

  2. Ir a branch y revsion desde donde se moverán los cambios Right Mouse -> Modify History -> Rebase

introduzca la descripción de la imagen aquí

  1. Haz clic en Rebase y reza para que no haya conflictos, fusiona si es necesario.

  2. Cambios push, en este punto todas las revisiones deben seguir siendo draft.

  3. Ir a la revisión más alta en la rama a la que estaba moviendo los cambios Right Mouse -> Change Phase to -> Public.

introduzca la descripción de la imagen aquí

Espero que esto te ahorre algo de tiempo.

 5
Author: Matas Vaitkevicius,
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
2016-06-28 15:17:49