2010-11-30 19 views
7

Estoy usando Mercurial y soy un poco novato. Acabo de realizar un cambio en mi repo con éxito, luego ejecuté hg pull y hg update con éxito, sin fusiones ni conflictos.Mercurial: ¿cómo presionar a la rama predeterminada?

Luego trató de empujar al repositorio remoto, y tiene la temida: abort: push creates new remote heads!

hg glog muestra lo siguiente:

@ changeset: 576:c4c58970f141 
| tag:   tip 
| user:  me 
| parent:  566:70e287df5439 
| 
| o changeset: 575:7ae70ddd2b6e 
| | branch:  mongo 
| | 
| o changeset: 574:904da90475ef 
| | branch:  mongo 
| | 
| o changeset: 567:cad7a006965b 
|/ branch:  mongo 
| 
o changeset: 566:70e287df5439 
| user:  me 
| 

Parece que alguien ha creado una nueva rama en el repositorio, que es bien: solo quiero enviar mis cambios a la rama predeterminada, pero no sé cómo.

¿Cómo puedo presionar changeset 576? ¿Debo especificar que es una bifurcación por defecto?

+1

¿Estás seguro de que deseas empujar una nueva cabeza y no quieres fusionarte con (desde o hacia) esta rama? –

+0

Definitivamente no quiero presionar a la sucursal de mongo: me gustaría mantenerlo separado. – AP257

Respuesta

9

empuje de comandos de Mercurial tiene la opción -r para limitar el empuje a cambios hasta una revisión dada:

If -r/- se utiliza rev, la revisión y especificado todos sus ancestros ser empujado al repositorio remoto.

Esto implica que usted también limita la rama que va a presionar. Para pasar todos los cambios hasta la punta de la rama por defecto, usted podría funcionar:

$ hg push -r default 

Esto hará caso de su mongo rama. En lugar de los nombres de las sucursales, también se puede utilizar revisiones específicas:

$ hg push -r 576 

Obviamente, siempre y cuando la revisión 576 es la punta de la rama por defecto, ambos comandos tienen el mismo efecto.

En una nota lateral, hay un acceso directo a menudo útil para empujar solamente la revisión de los padres de la copia de trabajo actualmente realizado el pedido, el uso de un período como el especificador de revisión:

$ hg push -r . 
+0

Este es un consejo sólido, pero en este caso parece que es demasiado pensamiento excesivo. Probablemente solo necesitó primero arrastrar la rama predeterminada para hacer una combinación/rebase que evitaría crear una cabeza remota. –

4

Ver una discusión muy reciente en este

Mercurial siempre se quejan de la creación de nuevas cabezas en el control remoto. Debe usar ya sea --force o --new-branch al crear un nuevo encabezado.

[Editar:]

Esto es específicamente para hacer que el usuario consciente de que está introduciendo cabeza múltiple en repositorio remoto. La práctica normal no es crear cabezas mediante el comando de inserción. Si desea crear varias cabezas en el repositorio remoto (que generalmente es repo central).

Como Binary Phile, dice perfectamente, esto provoca empujar la fusión hacia arriba. Lo cual no es bueno

+0

Me preocupa usar la fuerza. ¿Debería usar "-new-branch default" o algo así? – AP257

+0

@ AP257: Sí. Es mejor usar "-new-branch .." Ver mi edición. – pyfunc

+0

@ AP257: También debe mirar la respuesta de Oben Sonne que contiene una consideración importante. Algunas veces queremos impulsar nuestros cambios para el repositorio predeterminado de cabeza a remoto y continuar teniendo múltiples encabezados localmente. En tal caso, su respuesta también se aplica. – pyfunc

5

Algo más está sucediendo porque una rama remota como mongo no causa un aborto de cabecera múltiple, solo múltiples cabezas en la misma rama lo hacen. [Actualización:. En realidad, hace obtener una rama remota abortar, análogo a un cabezal remoto abortar, a menos que tenga Push new branch marcada en el menú Sincronizar de su TortoiseHg como lo hice]

Sin importar la causa, el buen procedimiento es que se comprometan a tu repositorio local (que usted ha hecho), entonces tirón los cambios remotos, combinación con la suya, cometen el resultado y, por último, empuje los cambios fusionados a la cesión temporal.

Hay una extensión llamada fetch que ayuda a consolidar este proceso en un solo paso. Puede obtener más información al respecto here.

¡No fuerce el empuje al repositorio remoto! Esto simplemente está evitando la responsabilidad de la fusión e incluso puede romper cosas, como un sistema de compilación que se basa en tener todos los cambios en una línea no ramificada. Al menos confundirá o irritará a aquellos con quienes está trabajando. A menos que esa sea su intención, en cuyo caso, a toda máquina. :)

Realmente necesita leer algunos conceptos básicos sobre la colaboración antes de comenzar a hacerlo. Comience here.

+0

+1, este es un consejo sensato. – pyfunc

+0

Buen consejo, gracias por el enlace. – AP257

Cuestiones relacionadas