Aujourd'hui, je regardais les journaux d'un projet et j'ai réalisé qu'il y a quelque temps, j'ai touché le nom d'une étiquette. Existe-t-il un moyen de renommer la balise? Google n'a rien trouvé d'utile.
Je me rends compte que je pouvais vérifier la version étiquetée et créer une nouvelle étiquette, j'ai même essayé. Mais cela semble créer un objet tag qui n'est pas tout à fait correct. Pour un,
git tag -l
la répertorie dans le désordre par rapport à toutes les autres balises. Je ne sais pas si c'est important, mais cela me porte à croire que le nouvel objet tag n'est pas tout à fait ce que je veux. Je peux vivre avec ça, car je me soucie vraiment que le nom de la balise corresponde à la documentation, mais je préfère le faire "bien", en supposant qu'il existe une bonne façon de le faire.
git log --oneline --decorate --graph
est utile lors du nettoyage des balises.Réponses:
Voici comment je renomme une étiquette
old
ànew
:Le signe deux-points dans la commande push supprime la balise du référentiel distant. Si vous ne le faites pas, Git créera l'ancienne balise sur votre machine lorsque vous tirerez.
Enfin, assurez-vous que les autres utilisateurs suppriment la balise supprimée. Veuillez leur dire (collègues) d'exécuter la commande suivante:
Notez que si vous modifiez une balise annotée , vous devez vous assurer que le nouveau nom de balise fait référence à la validation sous-jacente et non à l'ancien objet de balise annoté que vous êtes sur le point de supprimer. Par conséquent, utilisez
git tag -a new old^{}
plutôtgit tag new old
(c'est parce que les balises annotées sont des objets alors que les balises légères ne le sont pas, plus d'informations dans cette réponse ).la source
git push origin :refs/tags/old
peut être simplifiégit push origin :old
je pense.git tag new old
créera une balise pointant vers l'ancienne balise, pas le commit de l'ancienne balise. (Voir Pourquoi ne puis-je pas retirer mon tag depuis Git GUI? )La question initiale était de savoir comment renommer une étiquette, qui est facile: tout d' abord créer un nouveau comme un alias de vieux:
git tag NEW OLD
supprimez VIEUX:git tag -d OLD
.La citation concernant "la manière Git" et (in) la raison est hors de propos, car il s'agit de préserver un nom de balise, mais de le faire référence à un état de référentiel différent.
la source
git push origin
entreprise.git tag new old
créera une balise pointant vers l'ancienne balise, pas le commit de l'ancienne balise. (Voir Pourquoi ne puis-je pas retirer mon tag depuis Git GUI? )En plus des autres réponses:
Vous devez d'abord créer un alias de l' ancien nom de la balise, pointant vers le commit d'origine:
Ensuite, vous devez supprimer l'ancien localement :
Ensuite, supprimez la balise sur vos emplacements distants:
Enfin, vous devez ajouter votre nouvelle balise à l'emplacement distant. Jusqu'à ce que vous ayez fait cela, les nouvelles balises ne seront pas ajoutées:
Répétez cela pour chaque emplacement distant.
Soyez conscient des implications d'un changement de Git Tag pour les consommateurs d'un package!
la source
git tag new old
créera une balise pointant vers l'ancienne balise, pas le commit de l'ancienne balise. (Voir Pourquoi ne puis-je pas retirer mon tag depuis Git GUI? )git tag new old^{}
, alors nous n'avons pas besoingit tag new_tag_name old_tag_name
(la première étape).S'il est publié, vous ne pouvez pas le supprimer (sans risquer d'être goudronné et à plumes, c'est-à-dire). La «manière Git» est de faire:
Alternativement,
C'est tellement fou parce que:
Toute la courtoisie des pages de manuel .
la source
Cette page wiki a cet intéressant one-liner, qui nous rappelle que nous pouvons pousser plusieurs refs :
L'idée est donc de pousser:
<new-tag>
pour tous les commits référencés par<old-tag
>:<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
Voir comme exemple " Changer la convention de nommage des balises à l'intérieur d'un référentiel git? ".
la source
git cat-file -p <tag>
; avec votre méthode sur mon système, je reçois la balise «renommée» ref (<new-tag>
), mais son champ de balise est toujours<old-tag>
.En complément des autres réponses, j'ai ajouté un alias pour tout faire en une seule étape, avec une sensation de commande de déplacement * nix plus familière. L'argument 1 est l'ancien nom de la balise, l'argument 2 est le nouveau nom de la balise.
Usage:
la source
!sh
(question était À propos de Windows Git), cependant, après la mise à jour du format à ce qui suit, il a travaillé:renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Suivez l'approche en 3 étapes pour une ou plusieurs balises.
Étape 1: identifier l'ID de validation / objet de la validation vers laquelle pointe la balise actuelle
Étape 2: supprimer la balise du référentiel
Étape 3: créer une nouvelle balise pointant vers le même ID de validation que l'ancienne balise pointait vers
Une fois que le git local est prêt avec le changement de nom de balise, ces changements peuvent être repoussés à l'origine pour que d'autres les prennent.
la source
git push origin :refs/tags/v0.1.0-Demo
et pour repousser les balises (avec d'autres choses en attente)git push --tags
Pour les aventuriers, cela peut être fait en une seule commande:
la source
git gc
récemmentcp
), avec le message du responsable intact.Indépendamment des problèmes liés à la transmission des balises et au changement de nom des balises qui ont déjà été poussées, dans le cas où la balise à renommer est annotée , vous pouvez d'abord la copier grâce à la ligne de commande à ligne unique suivante:
Ensuite, il vous suffit de supprimer l'ancienne balise:
J'ai trouvé cette ligne de commande grâce aux deux réponses suivantes:
Edit:
Ayant rencontré des problèmes lors de la synchronisation automatique des paramètres de balises
fetch.pruneTags=true
(comme décrit dans https://stackoverflow.com/a/49215190/7009806 ), je suggère personnellement de copier d' abord la nouvelle balise sur le serveur, puis de supprimer l'ancienne. De cette façon, la nouvelle balise n'est pas supprimée de manière aléatoire lors de la suppression de l'ancienne balise et une synchronisation des balises voudrait supprimer la nouvelle balise qui n'est pas encore sur le serveur . Ainsi, par exemple, tous ensemble, nous obtenons:la source
Vous pouvez également renommer des balises distantes sans les extraire, en dupliquant l'ancienne balise / branche à un nouveau nom et supprimez l'ancienne, en une seule
git push
commande.Renommage tag à distance / branche à distance → conversion de tag: (Avis:
:refs/tags/
)Renommage branche à distance / tag distance → conversion de branche: (Avis:
:refs/heads/
)Sortie renommant une balise distante:
la source