mercurial - subir - renombrar rama remota
Mercurial: ¿Puedo renombrar una rama? (5)
Ahora tenemos una rama "stiging", donde "staging" parece ser un ajuste semántico mucho mejor. ¿Cuál es una buena estrategia para manejar esto?
Esto modifica el historial y es solo para usuarios avanzados de Mercurial. No hagas esto si no sabes lo que eso significa.
Si la rigidez es solo local, puede cambiarla a estadificación con una combinación de graft y strip . Comience actualizando el conjunto de cambios del antepasado en el que se había divergido la detención. Cree la rama de la puesta en escena e injerta cada compromiso desde la colocación hasta la puesta en escena. La puesta en escena ahora debe ser una copia de la pisada. Por último, destruye el stiging despojando su primer commit.
hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch
Haz una nueva rama llamada "puesta en escena" y olvida la otra ...
Para futuros lectores: con la extensión de rebase
, puede crear una nueva rama con el mismo padre como stiging
y mover todo el historial de la rama a ésta, como esto:
hg update -r "parents(min(branch(''stiging'')))"
hg branch staging
hg commit
hg rebase --source "min(branch(''stiging''))" --dest staging
Esto supone que stiging
tiene un solo padre. Por supuesto, puedes usar números de revisión explícitos.
Nota 1: Si la división de stiging
incluye la fusión con otras ramas, creo que esto las preservará, siempre y cuando la staging
y la stiging
tengan el mismo padre. Pero sin duda lo volvería a comprobar.
Nota 2: Dado que esto edita el historial, la rama antigua simplemente no desaparecerá de los repositorios clonados (consulte la documentación de rebase
). A menos que todos puedan clonar de nuevo, puede que no sea una solución muy práctica para un grupo grande.
Note3 / Edit (cortesía de @JasonRCoombs): Ahora que las phases son estándar en mercurial, rebase
rechazará modificar los conjuntos de cambios que ya se han enviado. Puede engañarlo cambiando la fase a borrador (con hg phases
), o dejar que la rama antigua permanezca donde está, y simplemente hacer una copia con el nombre correcto (por ejemplo, con `hg rebase --keep '').
Si tiene cambios en él, entonces tendrá que usar la extensión de conversión con un mapa de sucursal para cambiarle el nombre. Todo el mundo tendrá que clonar el nuevo repositorio o quitar la rama antigua.
Actualiza a la rama de stiging
y crea una nueva rama a partir de ella. Luego cierra la rama vieja.
En resumen:
hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch