tag remove remota rama origin example cambiar git tags push head master

git - remove - Establecer la rama principal a la última etiqueta



git push tag (3)

Este es un ejemplo de cómo mi repositorio de git es ahora mismo:

v1.0 v1.1 v1.2 | | | a - b - c | | master HEAD

Por lo general, comprometo, etiqueto y envío etiquetas como esta:

git commit -a -m "Commit msg" git tag -a v1.3 -m "Tag msg" git push --tags

El principal problema que tengo es que la rama principal no se mueve a la última etiqueta, por lo que siempre estoy en un estado de HEAD Detached . ¿Hay alguna manera de arreglar esto para que la rama principal siempre apunte a la última etiqueta empujada?


Varias respuestas / comentarios ya dados sobre por qué no hacer las cosas de esta manera, pero así es cómo se soluciona este escenario en particular:

git checkout -b tmpbranch # creates a branch called tmpbranch at HEAD git checkout master # switch back to master branch git merge --ff-only tmpbranch # fast-forward merge master to tmpbranch, fail if not possible git branch -d tmpbranch # delete tmpbranch, it''s not needed anymore

Luego, en el futuro, no revise una etiqueta, excepto por esta forma:

git checkout -b somebranch refs/tags/tagname # creates a new branch starting at tag

De esta manera, no estarás en el estado HEAD aislado, y se agregarán nuevos commits a partir de la etiqueta en cuestión, que parece ser lo que quieres ... Después de hacer una confirmación puedes git tag newtag para crear etiquetas adicionales en los puntos correctos.


En este caso particular, tuve que hacer lo siguiente:

1) Primero configure la rama principal para que apunte a la última etiqueta (a la que apunta HEAD), porque es la etiqueta más reciente. Para hacerlo, creé una nueva rama y fusioné el maestro.

git branch -b exp git merge -s ours master git checkout master git merge exp

Ahora maestro es lo mismo que la última etiqueta:

v1.0 v1.1 v1.2 | | | a - b - c | HEAD | master

2) Una vez que tengamos el master de nuevo en su lugar, necesitamos enviar tanto el maestro como las etiquetas cada vez que hagamos una nueva confirmación:

git commit -a -m "Commit msg" git tag -a v1.4 -m "Tag msg" git push master --tags

De esta forma evitamos estar en un modo HEAD separado y la rama principal se actualiza.


Una rama no hace referencia a una etiqueta.
Una etiqueta hace referencia a una confirmación fija .

Por lo tanto, siempre y cuando git checkout master , no se encuentra en modo HEAD desconectado .
A continuación, puede confirmar y etiquetar: la etiqueta se creará en ÚLTIMA VEZ de la rama actual.

Si estaba en un modo HEAD desconectado, consulte " Git: ¿Cómo puedo reconciliar el HEAD separado con el master/origin ? " Para obtener varias formas de reconciliar un commit separado con una rama.