215 votes

Les balises Git ne s'appliquent-elles qu'à la branche en cours ?

Je travaille actuellement avec un dépôt qui a plusieurs branches.

Lorsque je crée une balise, cette balise fait-elle référence à la branche en cours ?

En d'autres termes : Chaque fois que je crée un tag, dois-je passer à la branche souhaitée et taguer à l'intérieur de cette branche pour que le tag fasse référence à cette branche à ce moment-là ?

268voto

mklement0 Points 12597

La réponse de CharlesB y La réponse de helmbert sont tous deux utiles, mais il m'a fallu un certain temps pour les comprendre. Voici une autre façon de le dire :

  • A étiquette est un pointeur vers un commit y les commits existent indépendamment des branches .

    • Il est important de comprendre que Les balises n'ont pas direct relation avec les branches - ils n'identifient jamais qu'un commettre .
      • Ce commit peut être pointé depuis un nombre quelconque de branches - c'est-à-dire qu'il peut faire partie de l'historique d'un nombre quelconque de branches - y compris aucune.
    • Par conséquent, l'exécution git show <tag> pour voir les détails d'un tag ne contient aucune référence à une branche, seulement l'ID du commit vers lequel le tag pointe.
      • (Les ID de commit (aussi appelés noms d'objets ou ID SHA-1) sont des chaînes de 40 caractères composées de chiffres hexadécimaux qui sont des hachages du contenu d'un commit, par exemple : 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2 )
  • Les branches n'entrent en jeu que indirectement :

    • Au moment de créer une étiquette par impliquant l'engagement que le tag pointera vers :
      • Si l'on ne spécifie pas de cible pour une balise, le commit le plus récent de la branche courante (alias HEAD) est utilisé par défaut ; par exemple :
        • git tag v0.1.0 # tags HEAD of *current* branch
      • En spécifiant le nom d'une branche comme cible de la balise, le commit le plus récent de cette branche est utilisé par défaut ; par exemple :
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (Comme d'autres l'ont noté, vous pouvez aussi spécifier explicitement un ID de commit comme cible de la balise).
    • Lorsque vous utilisez git describe pour décrire la branche actuelle :
      • git describe [--tags] décrit la branche actuelle en termes de commits depuis le plus récent tag [éventuellement léger]. dans l'histoire de cette branche .
      • Ainsi, la balise référencée par git describe peut NE PAS refléter la balise la plus récemment créée global .

199voto

Kalle Pokki Points 1383

Si vous créez une balise par ex.

git tag v1.0

le tag fera référence au commit le plus récent de la branche sur laquelle vous êtes actuellement. Vous pouvez changer de branche et y créer une balise.

Vous pouvez aussi simplement faire référence à l'autre branche lors du marquage,

git tag v1.0 name_of_other_branch

qui créera le tag du commit le plus récent de l'autre branche.

Ou vous pouvez simplement mettre le tag n'importe où, quelle que soit la branche, en faisant directement référence au SHA1 d'un commit.

git tag v1.0 <sha1>

50voto

CharlesB Points 27070

Les tags et les branches ne sont absolument pas liés, puisque les tags font référence à un commit spécifique, et que la branche est une référence mobile au dernier commit d'un historique. Les branches vont, les tags restent.

Ainsi, lorsque vous étiquetez un commit, git ne se soucie pas de savoir quel commit ou quelle branche est extraite, si vous lui fournissez le SHA1 de ce que vous voulez étiqueter.

Je peux même baliser en me référant à une branche (il balisera alors l'extrémité de la branche), et dire plus tard que l'extrémité de la branche est ailleurs (avec git reset --hard par exemple), ou supprimer la branche. Cependant, la balise que j'ai créée ne bouge pas.

10voto

helmbert Points 1870

Lorsque vous appelez seulement git tag <TAGNAME> sans aucun paramètre supplémentaire, Git va créer une nouvelle balise à partir de votre HEAD actuel (c'est-à-dire le HEAD de votre branche actuelle). Lorsque vous ajoutez des commits supplémentaires dans cette branche, le HEAD de la branche suivra ces nouveaux commits, tandis que le tag se réfère toujours au même commit.

Lors de l'appel git tag <TAGNAME> <COMMIT> vous pouvez même spécifier quel commit utiliser pour créer la balise.

Quoi qu'il en soit, un tag est toujours simplement un "pointeur" vers un certain commit (pas une branche).

6voto

Sana Hameed Points 71

Nous pouvons créer une étiquette pour un engagement passé :

git tag [tag_name] [reference_of_commit]

eg :

git tag v1.0 5fcdb03

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X