2011-09-14 21 views
6

Tengo un conjunto de cambios no confirmado. Noté que actualmente estoy en la rama incorrecta, así que antes de comprometer esto, me gustaría cambiar a la rama en la que pretendo estar, luego comprometerme.Hg casi comprometido con la rama incorrecta

¿Qué tan difícil es esto para lograr en Hg?

+0

Creo que Mercurial es muy similar a Git. Entonces creo que tienes dos opciones. Guarde manualmente todos los archivos que haya agregado y modificado, cambie de rama y cópielos en la parte superior del sistema de archivos.O bien, realice los cambios en la rama actual, cambie a la rama que realmente deseaba y realice una combinación en ella desde la rama anterior. –

Respuesta

5

Si hay una trayectoria lineal entre la revisión actual de padres y la revisión de destino, a continuación, puedes emitir

hg update right-branch 

y Mercurial combinar los cambios en su copia de trabajo en la revisión destino.

Esto se hace usando la herramienta de combinación completa , por lo que se tienen en cuenta los cambios de nombre y obtendrá un programa de combinación de tres vías en caso de conflicto. Los enfoques basados ​​en shelve y diff carecen de esto y requieren que solucione los conflictos a mano usando los archivos .rej. Incluso puede ver el estado de fusión actual con hg resolve --list y volver a fusionar los archivos seleccionados, ya que Mercurial realiza las copias de seguridad necesarias para usted.

Si no hay un camino lineal, se obtiene la siguiente advertencia:

abort: crosses branches (merge branches or use --clean to discard changes) 

A continuación, puede obtener lo que desea por primera actualización de nuevo a un ancestro común, y luego actualizar de nuevo hacia delante. No estoy 100% seguro de por qué emitimos esta advertencia, pero buscar en los archivos de la lista de correo debería darte la respuesta si tienes curiosidad.

2

Si está utilizando TortoiseHg, es muy fácil de lograr con la capacidad de dejar de lado THG (http://tortoisehg.bitbucket.io/manual/2.9/shelve.html). En el cuadro de diálogo de confirmación, simplemente haga clic en el botón Guardar (cuyo icono es un archivo con una Z superpuesta) y luego en la flecha doble hacia la derecha para guardar todos los cambios. Cierre el diálogo de la estantería, actualice el conjunto de cambios correcto, abra el cuadro de diálogo de la estantería y haga clic en la flecha doble hacia la izquierda para desmantelarlos.

Si no está utilizando THG, puede instalar la extensión hgshelve (https://www.mercurial-scm.org/wiki/ShelveExtension), pero no estoy familiarizado con ella.

Parece que también puede lograr el mismo resultado con Mercurial Queues (http://mercurial.808500.n3.nabble.com/Shelve-extension-td802439.html).

3

Si desea hacer esto sin dejar de lado la extensión, haga lo siguiente:

hg diff --git > ../work_in_progress.patch 
hg up desired-branch 
hg import --no-commit ../work_in_progress.patch 

Dónde ../work_in_progress.patch puede ser cualquier ruta que desea (que suelen almacenar mis parches justo por encima de mi repositorio) y es desired-branch la rama en la que realmente desea aplicar sus cambios.

Tenga en cuenta que cualquier solución que he encontrado comienza a desmoronarse si la rama en la que se encuentra y la rama que va a son lo suficientemente diferentes como para que su parche no se aplique sin problemas. En ese caso, empiezas a tener que resolver conflictos manualmente.

Cuestiones relacionadas