Question Comment puis-je déplacer un tag sur une branche git vers un commit différent?


J'ai créé une étiquette sur la branche principale appelée v0.1 comme ça:

git tag -a v0.1

Mais alors j'ai réalisé qu'il y avait encore quelques changements dont j'avais besoin pour fusionner en master pour la version 0.1, donc je l'ai fait. Mais maintenant mon v0.1 tag est collé sur (pour invoquer l'analogie de note post-it) le mauvais commit. Je veux qu'il soit bloqué sur le commit le plus récent sur master, mais à la place il est bloqué sur le second commit le plus récent sur master.

Comment puis-je le déplacer vers le commit le plus récent sur master?


600
2017-11-08 00:32


origine


Réponses:


Utilisez le -f option à git tag:

-f
--force

    Replace an existing tag with the given name (instead of failing)

Vous voulez probablement utiliser -f en conjonction avec -a pour forcer-créer une étiquette annotée à la place d'une étiquette non annotée.

Exemple

  1. Supprimer le tag sur n'importe quelle télécommande avant de pousser

    git push origin :refs/tags/<tagname>
    
  2. Remplacer la balise pour référencer le commit le plus récent

    git tag -fa <tagname>
    
  3. Poussez l'étiquette vers l'origine distante

    git push origin master --tags
    

830
2017-11-08 00:34



Plus précisément, vous devez forcer l'ajout de la balise, puis appuyer sur les options --tags et -f:

git tag -f -a <tagname>
git push -f --tags

210
2018-01-15 00:40



Pour résumer si votre télécommande est appelée origin et vous travaillez sur master branche:

git tag -d <tagname>
git push origin :refs/tags/<tagname>
git tag <tagname> <commitId>
git push origin <tagname>
  • La ligne 1 supprime l'étiquette dans l'environnement local.
  • La ligne 2 supprime l'étiquette dans l'environnement distant.
  • La ligne 3 ajoute la balise à un commit différent
  • La ligne 4 pousse le changement à la télécommande

Vous pouvez également échanger la ligne 4 vers git push origin --tags pour pousser tous les changements avec des étiquettes de vos changements locaux.

En se basant sur @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking réponses, les commentaires ci-dessous leurs réponses et NateS commentaires ci-dessous ma réponse.


95
2018-02-02 14:53



Supprimez-le avec git tag -d <tagname> puis recréer le bon commit.


79
2017-11-08 00:34



Alias ​​pour déplacer un tag vers un commit différent.

Dans votre exemple, pour déplacer commit avec hachage e2ea1639 faire: git tagm v0.1 e2ea1639.

Pour les tags poussés, utilisez git tagmp v0.1 e2ea1639.

Les deux alias vous garde la date et le message d'origine. Si tu utilises git tag -d vous avez perdu votre message original.

Enregistrez-les sur votre .gitconfig fichier

# Return date of tag. (To use in another alias)
tag-date = "!git show $1 | awk '{ if ($1 == \"Date:\") { print substr($0, index($0,$3)) }}' | tail -2 | head -1 #"

# Show tag message
tag-message = "!git show $1 | awk -v capture=0 '{ if(capture) message=message\"\\n\"$0}; BEGIN {message=\"\"}; { if ($1 == \"Date:\" && length(message)==0 ) {capture=1}; if ($1 == \"commit\" ) {capture=0}  }; END { print message }' | sed '$ d' | cat -s #"

### Move tag. Use: git tagm <tagname> <newcommit> 
tagm = "!GIT_TAG_MESSAGE=$(git tag-message $1) && GIT_COMMITTER_DATE=$(git tag-date $1) && git tag-message $1 && git tag -d $1 && git tag -a $1 $2 -m \"$GIT_TAG_MESSAGE\" #"

### Move pushed tag. Use: git tagmp <tagname> <newcommit> 
tagmp = "!git tagm $1 $2 && git push --delete origin $1 && git push origin $1 #"

5
2018-05-21 20:02



Je vais laisser ici une autre forme de cette commande qui correspond à mes besoins.
Il y avait un tag v0.0.1.2 que je voulais bouger.

$ git tag -f v0.0.1.2 63eff6a

Updated tag 'v0.0.1.2' (was 8078562)

Et alors:

$ git push --tags --force

5
2017-09-19 00:14



Un autre moyen:

Déplacez la balise dans le repo distant (remplacez HEAD par un autre si nécessaire).

$ git push --force origin HEAD:refs/tags/v0.0.1.2

Récupère les modifications.

$ git fetch --tags

1
2018-03-15 07:44