Quiero forzar el empuje, por ejemplo, mi etiqueta 1.0.0
a mi master
rama remota .
Ahora estoy haciendo lo siguiente:
git push production +1.0.0:master
Quiero forzar el empuje , porque lo único que me importa es que el código dentro de la1.0.0
etiqueta se empuje a lamaster
rama en el repositorio remoto.
¿Qué estoy haciendo mal?
Actualización n. ° 1
Cuando hago SSH en mi servidor donde está mi repositorio Git y ejecuto git branch -l
, tampoco veo la master
rama en la lista.
Actualización n. ° 2
Después de ejecutar git tag -l
desde el repositorio remoto de Git, veo que master
aparece en la lista, lo que significa que cuando ejecuté lo siguiente:
git push production 1.0.0:master
En realidad, empujó la etiqueta y creó una etiqueta con nombre en master
lugar de una nueva rama .
Básicamente, quiero insertar el contenido de la etiqueta 1.0.0
en la master
rama del repositorio remoto de Git.
Respuestas:
Probablemente esté fallando porque
1.0.0
es una etiqueta anotada. Quizás viste el siguiente mensaje de error:Las etiquetas anotadas tienen su propio tipo distinto de objeto que apunta al objeto de confirmación etiquetado. Las ramas no pueden apuntar útilmente para etiquetar objetos, solo comprometer objetos. Necesita "pelar" la etiqueta anotada de nuevo para confirmar el objeto y empujar eso en su lugar.
Hay otra sintaxis que también funcionaría en este caso, pero significa algo ligeramente diferente si el objeto de etiqueta apunta a algo distinto de un commit (o un objeto de etiqueta que apunta a (un objeto de etiqueta que apunta a un ...) un commit) .
Estas sintaxis de pelado de etiquetas se describen en git-rev-parse (1) en Especificación de revisiones .
fuente
git push rep +tag:master
creará una etiqueta llamada maestro en lugar de una rama.git push rep +tag~0:master
(de nuevo, cuando el maestro no existe como una rama o una etiqueta) fallará con "error: no se puede empujar a un destino no calificado". El comando que habría hecho lo que quería (antes de que existiera una rama / etiqueta maestra ) esgit push rep +tag~0:refs/heads/master
(refs/heads/
es el espacio de nombres en el que se almacenan las ramas).~{commit}
sintaxis es literal (es decir, siempre esos nueve caracteres); La palabracommit
no es un marcador de posición aquí.fuente
git push production :1.0.0
.git push production :refs/tags/1.0.0
para eliminar solo la etiquetaCreo la etiqueta de esta manera y luego la envío a GitHub:
fuente
Para empujar una sola etiqueta:
git push <reponame> <tagname>
Por ejemplo,
git push production 1.0.0
. Las etiquetas no están vinculadas a las ramas, están vinculadas a las confirmaciones.Cuando desee tener el contenido de la etiqueta en la rama maestra, hágalo localmente en su máquina. Supongo que continuó desarrollando en su rama maestra local. Entonces solo
git push origin master
debería ser suficiente.fuente