J'ai créé une balise sur la branche principale appelée v0.1
comme ceci:
git tag -a v0.1
Mais j'ai réalisé qu'il y avait encore quelques changements dont j'avais besoin pour fusionner en master pour la version 0.1, alors j'ai fait ça. Mais maintenant, mon v0.1
tag est collé (pour invoquer l'analogie de la note post-it) le mauvais commit. Je veux qu'il soit bloqué sur le dernier commit sur master, mais à la place, il est bloqué sur le deuxième commit le plus récent sur master.
Comment puis-je le déplacer vers le commit le plus récent sur master?
git push origin :refs/tag/<tagname>
puis faitesgit tag -fa <tagname>
et puisgit push origin master --tags
. Sinon, vous pourriez vous retrouver avec des choses étranges dans la liste des références sur la télécommande avec des caractères ^ et {} ajoutés. Merci à Dan sur codebasehq.com de l'avoir signalé.:refs/tag/<tagname>
cela devrait l'être:refs/tags/<tagname>
.git push -f origin <tagname>
Plus précisément, vous devez forcer l'ajout de la balise, puis pousser avec l'option --tags et -f:
la source
Pour résumer si votre télécommande est appelée
origin
et que vous travaillez sur unemaster
succursale:Vous pouvez également échanger la ligne 4 pour
git push origin --tags
pousser toutes les modifications avec des balises à partir de vos modifications locales.Sur la base des réponses @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking, des commentaires sous leurs réponses et des commentaires NateS sous ma réponse.
la source
Supprimez-le avec
git tag -d <tagname>
, puis recréez-le sur le bon commit.la source
J'essaie d'éviter certaines choses lors de l'utilisation de Git.
Utiliser la connaissance des internes, par exemple les références / balises. J'essaie d'utiliser uniquement les commandes Git documentées et d'éviter d'utiliser des choses qui nécessitent la connaissance du contenu interne du répertoire .git. (C'est-à-dire que je traite Git comme un utilisateur Git et non comme un développeur Git.)
L'utilisation de la force lorsqu'elle n'est pas requise.
Trop de choses. (Pousser une branche et / ou beaucoup de balises, pour obtenir une balise où je le veux.)
Voici donc ma solution non violente pour changer une balise, à la fois localement et à distance, sans connaissance des internes de Git.
Je l'utilise lorsqu'un correctif logiciel a finalement un problème et doit être mis à jour / réédité.
github
est un exemple de nom distant,fix123
un exemple de nom de balise et790a621265
un exemple de validation.la source
Je vais laisser ici juste une autre forme de cette commande qui correspondait à mes besoins.
Il y avait une étiquette
v0.0.1.2
que je voulais déplacer.Et alors:
la source
Une autre façon:
Déplacez le tag dans le référentiel à distance (remplacez HEAD par un autre si nécessaire).
Récupérez les modifications.
la source
Alias pour déplacer une balise vers un autre commit.
Dans votre exemple, de se déplacer avec e2ea1639 engager de hachage faire:
git tagm v0.1 e2ea1639
.Pour les balises poussées, utilisez
git tagmp v0.1 e2ea1639
.Les deux alias vous gardent la date et le message d'origine. Si vous utilisez,
git tag -d
vous avez perdu votre message d'origine.Enregistrez-les sur votre
.gitconfig
fichierla source
Si vous souhaitez déplacer une balise annotée, en modifiant uniquement la validation ciblée mais en préservant le message d'annotation et d'autres métadonnées, utilisez:
utilisation: moveTag <tag-to-move> <target>
La fonction ci-dessus a été développée en référençant teerapap / git-move-annotated-tag.sh .
la source
git tag -f -a my_tag
conserve déjà le message d'un message précédent (avec la version 2.11.0 de git).