He terminado de trabajar en una rama de características feature-x
. Quiero fusionar los resultados de nuevo a la default
rama y cerrarlos feature-x
para deshacerme de ellos en la salida de hg branches
.
Se me ocurrió el siguiente escenario, pero tiene algunos problemas:
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
Por lo tanto, la feature-x
rama (changests 40
- 41
) está cerrada, pero hay un nuevo encabezado , el conjunto de cambios de rama de cierre 44
, que se enumerará hg heads
cada vez:
$ hg log ...
o 44 Closed branch feature-x
|
| @ 43 merge
|/|
| o 42 Changeset C
| |
o | 41 Changeset 2
| |
o | 40 Changeset 1
|/
o 39 Changeset B
|
o 38 Changeset A
|
Actualización : Parece que desde la versión 1.5 Mercurial ya no muestra cabezas de ramas cerradas en la salida de hg heads
.
¿Es posible cerrar una rama fusionada sin dejar una cabeza más? ¿Hay alguna forma más correcta de cerrar una rama de características?
Preguntas relacionadas:
default
sin "cerrarlas". Resultó en 0 cabezas nuevas, pero tales ramas eran visibles parahg branches
siempre (como ramas inactivas).Respuestas:
Una forma es dejar abiertas las ramas de entidades fusionadas (e inactivas):
Otra forma es cerrar una rama de características antes de fusionar usando una confirmación adicional:
El primero es más simple, pero deja una rama abierta. El segundo no deja cabezas / ramas abiertas, pero requiere una confirmación auxiliar más. Se puede combinar el último compromiso real con la rama de características con este compromiso adicional utilizando
--close-branch
, pero se debe saber de antemano qué compromiso será el último.Actualización : desde Mercurial 1.5 puede cerrar la rama en cualquier momento para que no aparezca en ambos
hg branches
yhg heads
más. Lo único que podría molestarte es que técnicamente el gráfico de revisión todavía tendrá una revisión más sin niños.Actualización 2 : desde Mercurial 1.8 los marcadores se han convertido en una característica central de Mercurial. Los marcadores son más convenientes para ramificar que las ramas con nombre. Ver también esta pregunta:
fuente
Bookmarks are more convenient for branching than named branches
. Los marcadores de Hg no son lo mismo que las ramas de Git. Están llenos de muchos casos extremos que los hacen inadecuados como ramas de características. Por ejemplo: cuando clona un repositorio, terminará con la última confirmación en ladefault
rama. Si usa marcadores, este conjunto de cambios corresponde a un marcador aleatorio (inestable). Si usa ramas con nombre, obtendrá la última confirmación en la rama estable / predeterminada, que generalmente es lo que desea. Los marcadores llegarán algún día, pero aún no están allí.abort: push creates new remote branches:
. ¿Qué podría haber hecho mal?En mi opinión, hay dos casos para las ramas que se olvidaron de cerrar
Caso 1: la rama no se fusionó con el valor predeterminado
en este caso, actualizo la rama y hago otra confirmación con --close-branch, desafortunadamente esto elige la rama para convertirse en la nueva punta y, por lo tanto, antes de enviarla a otros clones, me aseguro de que la punta real reciba algunos cambios más y otros no te confundas con ese extraño consejo.
Caso 2: la rama se fusionó con la predeterminada
Este caso no es muy diferente del caso 1 y se puede resolver reproduciendo los pasos para el caso 1 y dos adicionales.
en este caso, actualizo el conjunto de cambios de la rama, hago otra confirmación con --close-branch y fusiono el nuevo conjunto de cambios que se convirtió en la sugerencia por defecto. la última operación crea una nueva sugerencia que está en la rama predeterminada: ¡HOORAY!
Espero que esto ayude a los futuros lectores.
fuente
hg help ci
se lo explicaré.EDITAR ay, demasiado tarde ... Sé leer su comentario indicando que desea mantener el conjunto de cambios de función-x, por lo que el enfoque de clonación aquí no funciona.
Todavía dejaré la respuesta aquí porque puede ayudar a otros.
Si desea deshacerse por completo de la "característica X", porque, por ejemplo, no funcionó, puede clonar. Este es uno de los métodos explicados en el artículo y funciona, y habla específicamente de cabezas.
Por lo que yo entiendo, tienes esto y quieres deshacerte de la cabeza "feature-x" de una vez por todas:
Entonces haces esto:
Y tendrá lo siguiente, y verá que la característica-x se ha ido:
Puede que haya entendido mal lo que quería, pero no modifique, me tomé el tiempo de reproducir su caso de uso:)
fuente
Es extraño que nadie haya sugerido aún la forma más sólida de cerrar las ramas de una característica ... Puede combinar la confirmación de fusión con --close-branch flag (es decir, confirmar los archivos modificados y cerrar la rama simultáneamente):
Entonces eso es todo. Nadie más cabeza en revgraph. Sin compromiso adicional.
fuente
merge
comando, puede ser una buena idea usarhg branch
para verificar que el nombre de la rama de la fusión sea el que desea mantener abierto.