2010-12-16 14 views
6

Estoy trabajando en un proyecto que está utilizando mercurial y ha metido en un poco de un desastre con un número de cabezas que a todos los efectos intensivos están muertos.Cerrar la cabeza sin cometer ningún cambio

Quiero acabar con estas cabezas y llevar el gráfico de comprometerse de nuevo a una sola línea.

Me han dicho que hay una forma de unir ramas pero al mismo tiempo ignorar cualquier cambio de archivo, por lo que esencialmente solo se fusiona el árbol, pero parece que no puedo resolver el conjunto de comandos.

¿Hay una manera de hacer esto, acabar con ramas haciendo fusiones e ignorando los cambios en los archivos? ¿O, como alternativa, hay una forma de volver a introducir el gráfico sin los cambios (que no son masivamente irrelevantes en el proyecto)?

Respuesta

3

creo que esto es justo lo que está buscando: Keep My or Their files when doing a merge

Se va a crear nuevos conjuntos de cambios de combinación que cerrar el "otro" cabeza w/o tomar en cualquiera de sus cambios. No terminará con un historial lineal, pero terminará con una sola cabeza.

Otras respuestas inferiores incluyen el uso de hg strip o hg clone -r para eliminar las cabezas/ramas anónimas que no desea. Son inferiores porque (a) si existen otros clones, no puedes despojarlos, no funciona en absoluto y (b) descartan la historia, que es lo opuesto a una buena práctica de control de versiones: incluso el trabajo no lo piensas lo que quieras ahora puede ser valioso algún día.

+1

No pienso pelar tan inferior. En realidad, no recomendaría una fusión eliminatoria: el gráfico del historial indicaría engañosamente que la línea fusionada se basa en la rama eliminada. Si existe la posibilidad de que se necesite una rama más tarde, consérvela o quítela de otra manera. Dile a tus compañeros de trabajo que también pelen/reclone sus repositorios. Si uno entiende las implicaciones relacionadas con la colaboración de stripping, está bien usarlo. Aún así, puede mantener un repositorio público simplificado (es decir, desmantelado) y un repositorio interno * sin salida *, con sucursales que probablemente (pero no con seguridad) ya no necesiten. –

5

Si está utilizando TortoiseHg y ramas nombradas, puede seleccionar la opción sucursal en el diálogo de confirmación para cerrar una rama y permitirá que se comprometa sin tener un cambio real del archivo.

Todavía vamos a salir con la cabeza, pero será marcada inactiva.

+2

Así es como lo hago. La línea de comandos para que sea 'hg cometer --close-branch' – barjak

+0

Mientras que sale el cabeza todavía existe (y, si realmente desea, se podría comprometer a la cabeza después de volver a abrir la rama), ignorará es la cabeza de la mayoría de las operaciones (por ejemplo, 'hg heads' y, más importante,' hg merge'). 'hg push' aún requerirá que use --force, sin embargo. – Matt

+0

Esto funciona ... para ramas con nombre. Pero la mayor parte de mi trabajo es con la anónima hidra n-headed. –