merge - ¿Cómo cerrar correctamente una rama de función en Mercurial?
branch hg-merge (4)
En este momento hay dos casos de ramas que se olvidaron de cerrar.
Caso 1: la rama no se fusionó con el valor predeterminado
en este caso, actualizo a la rama y hago otro compromiso con --cerrar-rama, desafortunadamente esto elige a la rama para que se convierta en la nueva punta y, por lo tanto, antes de empujarla a otros clones, me aseguro de que la punta real reciba algunos cambios más y otros No te confundas con esa extraña propina.
hg up myBranch
hg commit --close-branch
Caso 2: la rama se fusionó en defecto
Este caso no es muy diferente del caso 1 y puede resolverse reproduciendo los pasos para el caso 1 y dos adicionales.
en este caso, actualizo al conjunto de cambios de sucursal, 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!
hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch
Espero que esto ayude a los futuros lectores.
He terminado de trabajar en una rama de feature-x
. Quiero fusionar los resultados de nuevo a la rama por default
y cerrar la feature-x
para deshacerme de él en la salida de las hg branches
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
Así que la feature-x
rama (changests 40
- 41
) está cerrada, pero hay un nuevo cabezal , el conjunto de cambios de la rama de cierre 44
, que se incluirá en las 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 las hg heads
.
¿Es posible cerrar una rama fusionada sin dejar una cabeza más? ¿Hay una forma más correcta de cerrar una rama de función?
Preguntas relacionadas:
Es extraño que nadie haya sugerido aún la forma más robusta de cerrar las ramas de una función ... Simplemente puede combinar la confirmación de fusión con la bandera --cerrar-rama (es decir, confirmar archivos modificados y cerrar la rama simultáneamente):
hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f
Entonces, eso es todo. No hay una cabeza extra en revgraph. Sin compromiso adicional.
Una forma es simplemente dejar las ramas de las funciones fusionadas abiertas (e inactivas):
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg heads
(1 head)
$ hg branches
default 43:...
feature-x 41:...
(2 branches)
$ hg branches -a
default 43:...
(1 branch)
Otra forma es cerrar una rama de características antes de fusionar usando un compromiso adicional:
$ hg up feature-x
$ hg ci -m ''Closed branch feature-x'' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg heads
(1 head)
$ hg branches
default 43:...
(1 branch)
El primero es más sencillo, pero deja una rama abierta. El segundo no deja cabezas / ramas abiertas, pero requiere un compromiso auxiliar más. Uno puede combinar el último compromiso real con la rama de características con este compromiso adicional usando --close-branch
, pero 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 más en las hg branches
hg heads
y en las hg heads
. Lo único que podría molestarlo es que técnicamente el gráfico de revisión todavía tendrá una revisión más sin hijos.
Actualización 2 : Desde Mercurial 1.8, los marcadores se han convertido en una característica fundamental de Mercurial. Los marcadores son más convenientes para la ramificación que las ramas nombradas. Véase también esta pregunta:
EDICIÓN ouch, demasiado tarde ... Sé que lea su comentario indicando que desea mantener el conjunto de cambios de la característica x, por lo que el enfoque de clonación aquí no funciona.
Todavía dejaré que la respuesta aquí para que pueda ayudar a otros.
Si desea deshacerse completamente 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 sobre los jefes.
Según tengo entendido, tienes esto y quieres deshacerte de la cabeza de "feature-x" de una vez por todas:
@ changeset: 7:00a7f69c8335
|/ tag: tip
| | parent: 4:31b6f976956b
| | parent: 2:0a834fa43688
| | summary: merge
| |
| | o changeset: 5:013a3e954cfd
| |/ summary: Closed branch feature-x
| |
| o changeset: 4:31b6f976956b
| | summary: Changeset2
| |
| o changeset: 3:5cb34be9e777
| | parent: 1:1cc843e7f4b5
| | summary: Changeset 1
| |
o | changeset: 2:0a834fa43688
|/ summary: Changeset C
|
o changeset: 1:1cc843e7f4b5
| summary: Changeset B
|
o changeset: 0:a9afb25eaede
summary: Changeset A
Así que haces esto:
hg clone . ../cleanedrepo --rev 7
Y tendrás lo siguiente, y verás que la característica-x se ha ido de hecho:
@ changeset: 5:00a7f69c8335
|/ tag: tip
| | parent: 4:31b6f976956b
| | parent: 2:0a834fa43688
| | summary: merge
| |
| o changeset: 4:31b6f976956b
| | summary: Changeset2
| |
| o changeset: 3:5cb34be9e777
| | parent: 1:1cc843e7f4b5
| | summary: Changeset 1
| |
o | changeset: 2:0a834fa43688
|/ summary: Changeset C
|
o changeset: 1:1cc843e7f4b5
| summary: Changeset B
|
o changeset: 0:a9afb25eaede
summary: Changeset A
Puede que haya entendido mal lo que quería pero, por favor, no lo modifique, me tomé el tiempo de reproducir su caso de uso:)