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?Movimiento mercurial cambia a una nueva sucursal
Respuesta
Como sugerido por Marcos, el MqExtension es una solución para usted un problema. En mi humilde opinión, un flujo de trabajo más simple es usar el rebase extension. Suponga que 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, revisión 0
es la base sobre la que ha iniciado a trabajar en su función. Ahora desea 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 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
utilizar el comando rebase
para mover las revisiones 1-2
en la revisión 3
:
$ hg rebase -s 1 -d 3
Este resultados en el siguiente gráfico:
Eso es ... como se mencionó en los comentarios a la respuesta de Mark, mover conjuntos de cambios ya presionados es una mala idea, a menos que trabaje en un equipo pequeño en el que pueda comunicarse y hacer cumplir su historial de manipulación.
En mi humilde opinión, el inconveniente de esta solución es que introduce una confirmación ficticia "start new branch my-feature" (es decir, una que no cambia ningún archivo). – sschuberth
@sschuberth: Creo que ser explícito es algo bueno aquí. Si el conjunto de cambios adicional es un problema para usted, combínelo con el siguiente (por ejemplo, usando el comando 'fold' de la extensión [histedit] ahora incorporada (http://mercurial.selenic.com/wiki/HisteditExtension)) –
¿Cómo se imprime el registro con el árbol ASCII? –
Puede usar el MqExtension. Digamos que los conjuntos de cambios para mover las revisiones son: 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
Quiero importar 63:64 y 66:68. Estoy recibiendo la revisión 65 no es el padre de 64 – Casebash
¿Qué quieres hacer con 65? Mq solo puede convertir conjuntos de cambios consecutivos desde un encabezado. Convierte conjuntos de cambios normalmente inmutables en parches mutables que se pueden editar. Esto cambia los valores hash (que afectan a todos los niños), por lo que no se puede omitir. –
Tengo una serie de cambios (incluidos 65) que hice en la rama principal y presioné – Casebash
prefiero la solución de parche describir here 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
mercuriales comandos:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
Aquí es 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 tengo que eliminar las revisiones 1 2 y 3 de mi rama por defecto. 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 añadir:
[extensions]
mq =
Y ahora despojar a 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
Para aquellos inclinados a utilizar la GUI
- Ir a
Tortoise Hg
->File
->Settings
continuación, marquerebase
.
Reiniciar tortuga IU
Crear nueva rama en la que habrá cambios en movimiento. Haga clic en el nombre de la sucursal actual -> elija
Open a new named branch
-> elija el nombre de la sucursal.
- Si no se han hecho cambios que desea mover
public
(por ejemplodraft
) hasta llegar a 5. (Si ya se han publicado los cambios y ya está no es un desarrollador veterano, debes hablar con alguien mayor (obtener un chivo expiatorio), ya que puedes arruinar las cosas a lo grande, no asumo ninguna responsabilidad :)).
Ir a View
->Show Console
(o Ctrl +L) a continuación, escribir en la consola hg phase -f -d 2
- donde 2 es la revisión más bajo va a mover a la nueva rama.
Ir en rama y revisión (revisión debería ser más alta si se está moviendo a cambios nueva rama creada en el paso 3.)
Right Mouse
->Update
Ir a ramificarse y revsion va a mover cambios de
Right Mouse
->Modify History
->Rebase
Haz clic en
Rebase
y ora para que no haya conflictos, únete si es necesario.Cambios de inserción, en este momento todas las revisiones deben seguir siendo
draft
.Ir a la revisión más alta en la rama que estaba moviendo cambia a
Right Mouse
->Change Phase to
->Public
.
Hope esto le ahorra tiempo.
¡Buen trabajo! voy a intentar esto, solo una pregunta: ¿por qué cambiar la fase al público al final? "Todos los conjuntos de cambios que se ven en un repositorio remoto son públicos", ¿así que cuando presionas no se configurará como público de todos modos? –
@JoshLeeDucks Al presionar, ya no cambian a 'public' automgically (al menos para mí no). –
- 1. Cómo empujar una nueva sucursal sin historial
- 2. Detectar el movimiento a una nueva pestaña en Mobile Safari
- 3. ¿Es posible reabrir una sucursal cerrada en Mercurial?
- 4. Mercurial: ¿Puedo cambiar el nombre de una sucursal?
- 5. Configurar una sucursal local para enviar a una sucursal específica
- 6. git stash cambios se aplican a la nueva sucursal?
- 7. Subversion - Sucursal de una sucursal
- 8. Accidentalmente trabajando en la sucursal con nombre incorrecto en Mercurial
- 9. Transfiriendo cambios pendientes de TFVC a una nueva sucursal utilizando VS2010?
- 10. Tome todos mis cambios en la rama actual y muévalos a una nueva sucursal en Git
- 11. ¿Cómo se mueven todas las confirmaciones de un usuario específico a una nueva sucursal?
- 12. Mercurial: cree una sucursal sin tener que hacer un cambio primero
- 13. movimiento de maestro se compromete a una rama usando git
- 14. ¿Cómo puedo enviar mis cambios a una sucursal remota?
- 15. Mercurial: fusiona dos ramas en una tercera rama nueva
- 16. mercurial estableció una rama como la nueva rama predeterminada
- 17. jsTree abrir una sucursal
- 18. ¿Cómo obtener una copia nueva de una sucursal desde el repositorio remoto?
- 19. Descartar una sucursal local en Mercurial antes de que sea empujada
- 20. Sobrescritura de mi sucursal local con una sucursal remota
- 21. Cálculo de una movimiento máximo
- 22. Git: ¿Puedo asignar mi directorio de trabajo a una nueva rama sin comprometerla con una sucursal actual?
- 23. Cómo mover un conjunto de cambios a una nueva rama en mercurial
- 24. Movimiento de 2D a 3D
- 25. ¿Cómo mover confirmaciones a otra sucursal?
- 26. ¿Cómo comprar una sucursal remota en Git?
- 27. git push a la sucursal remota
- 28. ¿Cómo cambia Mercurial cuando ya he usado hg clone?
- 29. La extensión Mercurial Convert cambia los finales de línea
- 30. ¿Puedo agregar un mensaje/nota/comentario al crear una nueva sucursal en Git?
posible duplicado de [Cómo mover algunos de cambios a una nueva rama en mercurial] (http://stackoverflow.com/questions/2219756/how-to-move-some-changeset-to-a-new-branch- in-mercurial) –