2011-02-02 9 views
49

Tengo un repositorio de Hg con 3 ramas en él, pero dos de ellos están inactivos (ya que los he fusionado en mi rama predeterminada). hg heads muestra 3 cabezas, una para cada rama, aunque hg branches muestra 2 de esas ramas como 'inactivas'.¿Cómo presionar solo una rama en Hg?

Cuando trato de empujar mi rama por defecto (usando hg push --branch por defecto http: // ...) a otro repo, la fusión se interrumpe con el mensaje "abortar: empuje crea nuevas sucursales remotas: ! "

En las páginas del manual de Hg, "Por defecto, push no permitirá la creación de nuevas cabezas en el destino, ya que varias cabezas no aclararían qué cabeza usar. En esta situación, se recomienda tirar y fusionar antes de empujar ".

Ya lo he hecho, pero todavía no puedo presionar --branch por defecto sin que sea abortado.

Cualquier ayuda es apreciada. ¡Gracias!

Respuesta

53

Si los conjuntos de cambios en default tienen conjuntos de cambios ancestrales en otras ramas, también tiene que empujar esos conjuntos de cambios. No es posible que exista un conjunto de cambios en un repositorio sin todos sus conjuntos de cambios también existentes.

Así que trate de:

hg push --branch default --new-branch 

que dice "sí, sé que este empuje envía a través de un nombre de la sucursal que el repositorio remoto no ha visto anteriormente antes" (que también requiere Mercurial 1.6 o posterior IIRC)>

Además, se puede tomar esas cabezas inactivas y hacer que se cerraron con cabezas:

hg update thebranch 
hg commit --close-branch -m 'closing' 

Porque "ramas nombradas son siempre" muchas personas optan por reservarlos para vivido lo conceptos como "estable" y "experimental" y el uso de marcadores, ramas anónimas o clones para funciones, lanzamientos y otras cosas transitorias. Vea esto para un guide en esas otras opciones.

+10

Su respuesta es correcta, pero eso no significa que me guste;) – simon

+2

Lo suficiente. Evito las ramas nombradas por completo. Soy un clones como tipos de ramas. –

+7

Seguramente lo hace. Uso git más de lo que uso Merucrial, y también tengo un .gitconfig que requiere edición manual porque git no puede actualizarlo. Mercurial no está dispuesto a corromper tu configuración y es idiota si te lo pides. Ambas opciones son válidas siempre que estén documentadas. No sé a qué artículo vinculaste allí, pero ese tipo podría usar un editor. –

0

¡Puedes FORZARLO!

Aquí es cómo:

1. Pull from your repository 
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch) 
3. do NOT force before PULLing. if you do things will get out sync and you are screwed 

Si está utilizando algo así como RhodeCode continuación, comprobar que funciona después de forzarla y verá que su última rama está allí.

Sin embargo, creo que más adelante Mercurial te va a pedir que presiones la otra rama, incluso si la cierras, Mercurial intentará crear esa rama en un servidor.

También soy usuario de Git y me encontré con la misma situación porque un cliente usa Mercurial pero me gustaría usar el estilo de flujo de trabajo de Git.

Creo que es factible pero aún no lo he descubierto al 100%.

23

para empujar una sola rama que acaba de utilizar -b

hg push -b myBranch 

en cuanto a la cuestión específica, es posible que desee ver en las ramas de cierre.Sé que SourceTree lo ofrece, pero no estoy seguro de los detalles

+0

Gracias, esta fue la respuesta que estaba buscando. Simplemente cómo empujar una sola rama. –

+0

Esto no funciona para mí. Aún necesita agregar '--new-branch' – Mahm00d

+1

Esto se debe a que la rama que está presionando aún no se ha enviado al servidor. Si está presionando una rama existente, esta respuesta funciona. – dguay

Cuestiones relacionadas