La filosofía mercurial es que no deberías estar presionando cosas que lo hagan más difícil para otros usuarios del repositorio. Pertinente a esta pregunta es que múltiples cabezales hacen que sea más difícil para otros desarrolladores, ya que luego necesitarían fusionar sus cambios. Por lo tanto, por defecto, el servidor rechaza la inserción de nuevas cabezas. La opción -f
se usó para permitir empujar cabezas nuevas.
Sin embargo, el caso de empujar una nueva rama con nombre es bastante diferente conceptualmente a empujar una nueva cabeza en la misma rama. Muchos flujos de trabajo (incluido el mío) realizan cada tarea en una rama con nombre diferente. La opción --new-branch
le permite empujar hacia arriba una nueva rama, mientras rechaza las nuevas cabezas en las ramas existentes. También es diferente (como has visto) porque es necesario incluso si la nueva rama no crea una nueva cabecera (debido a la fusión).
Mi sensación personal es que las nuevas sucursales deberían permitirse por defecto, pero los desarrolladores de mercurial prefieren lo contrario.
especulativamente, porque internamente una nueva rama es una nueva cabeza, y hg se resiste a enviar nuevas cabezas con la opción -f (fuerza). –
La diferencia en su comprensión podría ser que en Mercurial (a diferencia de git) aunque haya combinado foo en predeterminado, todavía está enviando algunos conjuntos de cambios cuyo atributo de rama inmutable es 'foo'. En git, el nombre foo nunca escaparía de tu sistema local con esos comandos, pero en Mercurial, si quieres ese comportamiento, utilizas marcadores que no se llaman ramas. –