El movimiento mercurial cambia a una nueva sucursal
branch (4)
Como sugiere Mark, MqExtension es una solución para su problema. En mi humilde opinión, un flujo de trabajo más simple es usar la extensión de rebase . Supongamos que tienes un historial como este:
@ 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 función. Ahora quiere tener las revisiones 1-2
en una rama con nombre, digamos my-feature
. Actualiza a la revisión 0
y crea esa rama:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
La historia ahora se ve así:
@ 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 las revisiones 1-2
a la revisión 3
:
$ hg rebase -s 1 -d 3
Esto da como resultado 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 menciona en los comentarios a la respuesta de Mark, moverse por los conjuntos de cambios ya empujados es una mala idea, a menos que trabajes en un equipo pequeño en el que puedas comunicarte y aplicar tu manipulación de la historia.
Tengo una serie de cambios que he comprometido en mi repositorio local, pero que aún no se han enviado. Como en una función tarda más de lo esperado, quiero cambiar estos cambios en una rama con nombre antes de presionar. ¿Cómo puedo hacer esto?
Para aquellos inclinados a usar GUI
- Vaya a
Tortoise Hg
->File
->Settings
luego marquerebase
.
Reiniciar la interfaz de usuario de tortuga
Crea una nueva rama donde moverás los cambios. Haga clic en el nombre de la sucursal actual -> elija
Open a new named branch
-> elija el nombre de la sucursal.
- Si los cambios que desea mover no se han hecho
public
(por ejemplo,draft
), vaya a 5. (Si ya se han publicado cambios y no es un desarrollador senior, debe hablar con alguien mayor (obtener un chivo expiatorio) ya que podría arruinarlo a lo grande, no asumo ninguna responsabilidad :)).
Vaya a View
-> Show Console
(o Ctrl + L ) luego escriba en la consola hg phase -f -d 2
- donde 2 es la revisión más baja que se moverá a la nueva sucursal.
Vaya a la bifurcación y la revisión (debe ser la revisión más alta si está moviendo los cambios a una nueva rama creada en el paso 3.)
Right Mouse
->Update
Ir a la rama y revsion, moverá los cambios desde el
Right Mouse
->Modify History
->Rebase
Haga clic en
Rebase
y ore para que no haya conflictos, fusione si es necesario.Cambios de inserción, en este punto todas las revisiones deben seguir siendo
draft
.Vaya a la revisión superior en la rama que estaba moviendo.
Right Mouse
->Change Phase to
->Public
.
Espero que esto te ahorre algo de tiempo.
Prefiero la solución de parche que describe here 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
comandos de mercurials:
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 de la extensión de mq. hg strip
elimina el conjunto de cambios y todos sus descendientes del repositorio.
Habilite la extensión agregando las siguientes líneas a su archivo de configuración (.hgrc o Mercurial.ini):
vim ~/.hgrc
y agregar:
[extensions]
mq =
Y ahora quita 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
Puedes usar MqExtension . Digamos que los conjuntos de cambios para mover son 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