Así es como hacerlo con la herramienta de línea de comandos. Supongo que se puede asignar fácilmente a TortoiseHg (aunque no estoy seguro, ya que nunca lo uso ...) De todos modos, como debería hacerse solo de vez en cuando, creo que no hay ningún problema en usar la terminal aquí. .
Un ejemplo de configuración de
Suponga que su repositorio remoto es algo como esto:
@ changeset: 3:a4c18a1fba12
| tag: tip
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
A nivel local, que no tenía comprometerse 4, por lo que cometió algo directamente sobre cometen 3:
@ changeset: 3:39526003350f
| tag: tip
| summary: commit 4 made locally
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Así que intenta presionarlo y recibe este mensaje:
$ hg push
pushing to ssh://[email protected]/brandizzi/mercurial-test-repo
searching for changes
remote has heads on branch 'default' that are not known locally: a4c18a1fba12
abort: push creates new remote head 39526003350f!
(pull and merge or see "hg help push" for details about pushing new heads)
Conforme a lo solicitado, se tire de ella:
$ hg pull
pulling from ssh://[email protected]/brandizzi/mercurial-test-repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
lo tienes ahora ...
o changeset: 4:a4c18a1fba12
| summary: commit 4
|
| @ changeset: 3:39526003350f
|/ summary: commit 4 made locally
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
... pero prefiere no combinar lo solicitado. Desea tener esto en su lugar:
o changeset: 4:a4c18a1fba12
| summary: commit 4 made locally
|
o changeset: 3:a4c18a1fba12
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Y luego desea empujarlo al repositorio remoto.
¿Cómo lo logras?
Resolverlo
Para conseguir eso, usted no puede han empujado el "commit 4 han añadido a nivel local". Además, no hay forma de ponerlo después de el nuevo control remoto confirma. Dicho eso, podemos obtener lo que pedimos.
Dicho esto, sólo tiene que reajustar confirmar sus locales en el nuevo mando a distancia de comprometerse:
$ hg rebase --source 3 --dest 4
Si tiene suerte, eso será suficiente.
la gestión de conflictos
Si tienes la mala suerte, es posible que tenga algunos conflictos:
$ hg rebase --source 3 --dest 4
rebasing 3:39526003350f "commit 4 made locally"
merging test.txt
warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)
Luego, sólo resolver los conflictos (editando manualmente):
$ hg st
M test.txt
$ nano test.txt # Edit and save
.. .marque el archivo como resuelto ...
$ hg resolve --mark
(no more unresolved files)
continue: hg rebase --continue
... y proceder con el rebase:
$ hg rebase --continue
rebasing 3:39526003350f "commit 4 made locally"
saved backup bundle to /home/adam/software/mercurial-test-repo/.hg/strip-backup/39526003350f-64863882-backup.hg
Aquí es su nueva historia:
@ changeset: 4:ca31fe8a15f0
| summary: commit 4 made locally
|
o changeset: 3:a4c18a1fba12
| summary: commit 4
|
o changeset: 2:91c5dbfba15c
| summary: commit 3
|
o changeset: 1:4c77cb7952ea
| summary: commit 2
|
o changeset: 0:085dae46f27e
summary: commit 1
Ahora, empujarlo:
$ hg push
pushing to ssh://[email protected]/brandizzi/mercurial-test-repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
Esos días, no es tan complejo como solía ser, ¿verdad?:)
Parece que la rama todavía estará allí, ¿sí? Espero eliminar completamente la rama, ya que aún no la he hecho permanente en el servidor. –
@msorens: Los dos conjuntos de cambios que se cometieron "en paralelo" seguirán siendo así, pero ¿es importante? Con la combinación, las dos ramas se unirán en una sola revisión superior. A partir de ese momento, volverá a haber una sola revisión más reciente, aunque tenga una breve bifurcación en dos ramas en sus predecesores. – sth
@msorens: estoy de acuerdo con sth. Después de un tiempo usando Mercurial, te das cuenta de que tratar de mantener el historial de revisión tan limpio no merece la pena. No importa que los conjuntos de cambios estén fuera de secuencia entre su servidor y sus repositorios locales o que tenga una sucursal anónima de corta vida (ambos son esperados si tiene más de una persona trabajando en un proyecto).) –