Comment puis-je créer une balise avec certains validations et la pousser vers l'origine?
Dire le journal en cours dans mon gerrit se présente comme suit:
- commit10 (master)
- commit9
- commit8
- commit7
- commit6 v1.72.0
- commit5
- commit4 v1.71.0
- commit3
- commit2
- commit1
Mon but est de créer une nouvelle balise (v1.73.0) qui doit contenir commit8 et commit9 et de le pousser à l'origine. On m'a dit de créer une nouvelle branche locale basée sur la dernière version stable de balise et de choisir le nécessaire s'engage et tag. Cependant, j'ai quelques problème en poussant la balise jusqu'à la maîtrise.
Voici ce que j'ai fait:
- créer une branche locale basée sur la dernière balise: git checkout -b branchforv1.73.0 v1.72.0
- cherry-pick commit8 et commit9
- créer un nouveau tag: git tag v1.73.0
...alors maintenant, comment puis-je pousser v1.73.0 à maître?
Résultat:
- commit10 (master)
- commit7
- commit9 v1.73.0
- commit8
- commit6 v1.72.0
- commit5
- commit4 v1.71.0
- commit3
- commit2
- commit1
source d'informationauteur aznmunkey
Vous devez vous connecter pour publier un commentaire.
L'utilisation de balises de travail
Dans git, chaque balise est dit "point" à un (un seul) s'engager. En fait, la même chose est vraie de la branche: un nom de branche aussi juste des points à un commit.
Ce qui rend ce travail est deux choses:
Ainsi, la principale différence entre une branche et une balise est une balise ne bouge pas.
Pour voir comment cela fonctionne, imaginez un simple dépôt git avec seulement trois s'engage. Laissez l'étiquette de ces commet
A
B
etC
. Le premier commit (A
) points pour rien, comme c'est le premier commit, et de la direction généralemaster
points deA
:Lorsque vous faites la seconde s'engager, git crée
B
pointant versA
et avances le nom de la branche de point deB
:Alors quand vous faites un tiers de commettre, git de nouveau fait le point de revenir à son parent s'engager, et les progrès de la branche:
Si vous faites une balise maintenant, cette balise sera, par défaut, le point de commettre
C
:Si vous effectuez ensuite un nouveau commit
D
git progrès de la branchemais pas la balise:Vous pouvez, à tout moment, de créer ou de supprimer n'importe quelle balise de pointage à un commit:
va supprimer la balise
sometag
après quoi:va ajouter
sometag
de pointage de commettreB
.1(Nous avons juste prouvé qu'une balise peut déplacer. La vraie différence est que les balises ne sont pas devrait pour se déplacer, tandis que les branches sont; et git ne se déplace pas automatiquement des balises.2 les Branches sont censés se déplacer dans une "avant de" direction", c'est à dire, si
master
utilisé pour le point de commettreC
et maintenant les points à commettreD
commettreC
doit généralement être trouvés en commençant àD
et de l'avant vers l'arrière. Chaque fois que vous transférez une branche de sorte que cette règle n'est pas respectée, vous êtes "réécrire l'histoire"; voir d'autres articles pour lorsque cela est très bien, et quand il pousse les gens ennuis.)Poussant les balises
Lorsque vous utilisez
git push
ce que vous êtes vraiment en train de faire est de les instruire de quelque autre dépôt git à prendre tout nouveau commet-vous qu'elles ne le sont pas, et ensuite de fixer des nom(s)—généralement, les branches et/ou des balises à pointer du doigt un "commit" (un de chaque) dans la collection.3 Ces noms (branches, les marques, et ainsi de suite) sont appelés des "références" en général, mais nous allons simplement utiliser "branche" et "tag" pour l'instant.L'argument après
git push
noms de dépôt (généralement par l'intermédiaire d'une "distance" du nom, commeorigin
) pour pousser à. Si vous le laissez, git va essayer de comprendre, mais si vous souhaitez ajouter une branche ou une étiquette de nom, vous devez l'inclure explicitement, depuis le premier mot ici est supposé être la distance de nom. (Qui est,git push master
essaie d'utilisermaster
à distance-nom plutôt qu'une branche de nom.)De pousser tous vos étiquettes, vous pouvez simplement ajouter
--tags
à votregit push
commande:De pousser un spécifiques balise, vous pouvez lui donner un nom:
comme vous pouvez pousser une branche spécifique:
(En fait, que le quatrième argument est un paire de noms, comme
master:master
ousometag:sometag
mais il utilise par défaut le même nom sur les deux côtés dans la plupart des cas.4)Vous pouvez laisser le nom
origin
si vous n'avez pas besoin de faire tous les arguments, par exemple,git push --tags
est le même quegit push --tags origin
(en supposant que tous vos pousse à aller àorigin
de toute façon).De les mettre ensemble
Pour définir une balise dans la télécommande, réglez d'abord localement, avec
git tag name commit-identifier
. Utilisez ce que spectateur vous, comme pour s'assurer qu'il est correctement réglé. Puis l'enfoncer, soit avecgit push origin name
ougit push --tags
.1La
master~2
syntaxe indique à git pour commencer à le commettre, viamaster
puis sauvegarder en deux étapes. Vous pourriez écrire les premières SHA-1 pour la validationB
ici.2d'Anciennes versions de git (pré 1.8.4) accidentellement appliqué des règles de succursale de balises lors de la poussée (sur le côté distant, c'est à dire, ils ont laissé un tag déplacer si c'était un "fast forward").
3Dans certains cas, vous pouvez pointer un nom à un "annoté tag", et il n'y a rien qui empêche un nom de pointage à un "arbre" ou "blob" de l'objet, soit, mais ce n'est pas une installation normale.
4en Fait, la valeur par défaut de l'heure d'été refspec pour une branche est compliqué: il dépend de votre
push.default
de configuration, et si il y a unremote.repository.push
paramètre, et s'il est configuré en amont, et ainsi de suite. Pour les balises, les règles sont plus simples car il n'y a pas une telle chose comme un "en amont".Voici un exemple concret:
Une fois que vous avez créé la balise (dont il semble que vous avez fait), il suffit de lancer