web-dev-qa-db-fra.com

Comment marquer un commit plus ancien dans Git?

Nous sommes nouveaux dans git, et je souhaite définir une balise au début de notre référentiel. Notre code de production est identique à celui du référentiel de départ, mais nous avons depuis effectué des validations. Une balise au début nous permettrait de "ramener" la production à un état connu et stable.

Alors, comment ajouter une balise à un commit plus ancien et arbitraire?

816
hogsolo

Exemple:

git tag -a v1.2 9fceb02 -m "Message here"

9fceb02 est la partie de début de l'ID de validation.

Vous pouvez ensuite pousser la balise à l’aide de git Push Origin v1.2.

Vous pouvez utiliser git log pour afficher tous les identifiants de validation de votre branche actuelle.

Il y a aussi un bon chapitre sur marquage dans le livre de Pro Git.

Attention: Ceci crée des tags avec la date courante (et cette valeur est ce qui sera affiché sur un GitHub les communiqués, par exemple). Si vous voulez que la balise soit datée avec la date de validation, veuillez regarder ne autre réponse .

1322
dkinzer

Juste le code

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

Détails

La réponse de @dkinzer crée des balises dont la date est la date du jour (lorsque vous avez exécuté la commande git tag), et non la date de la validation. L'aide Git pour tag a une section "Sur les balises antidater" qui dit:

Si vous avez importé certaines modifications d'un autre VCS et souhaitez ajouter des balises pour les versions majeures de votre travail, il est utile de pouvoir spécifier la date à intégrer à l'intérieur de l'objet balise; de telles données dans l'objet tag affectent, par exemple, l'ordre des tags dans l'interface de gitweb.

Pour définir la date utilisée dans les objets de balises futurs, définissez la variable d'environnement GIT_COMMITTER_DATE (voir la discussion ultérieure sur les valeurs possibles; la forme la plus courante est "AAAA-MM-JJ HH: MM").

Par exemple:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

La page "Comment taguer dans Git" nous montre que nous pouvons extraire l'heure du HEAD commettre via:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

Nous pourrions extraire la date d'un commit spécifique via:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

Cependant, au lieu de répéter la validation deux fois, il semble plus facile de simplement remplacer le HEAD par cette validation et de l'utiliser de manière implicite dans les deux commandes:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
114
Phrogz

Le moyen le plus simple de le faire est

git tag v1.0.0 f4ba1fc

f4ba1fc étant le début du hachage du commit que vous souhaitez taguer et v1.0.0 étant la version que vous souhaitez taguer.

78
PatrickNLT

Utilisez la commande:

git tag v1.0 ec32d32

Où v1.0 est le nom de la balise et ec32d32 est le commit que vous souhaitez marquer

Une fois cela fait, vous pouvez pousser les tags par:

git Push Origin --tags

Référence:

Git (contrôle de révision): Comment puis-je marquer un point de validation précédent spécifique dans GitHub?

30
Adrian Cid Almaguer

OK, vous pouvez simplement faire:

git tag -a <tag> <commit-hash>

Donc, si vous voulez ajouter la balise: 1.0.2 à commettre e50f795, faites simplement:

git tag -a 1.0.2 e50f795

Aussi, vous ajoutez un message à la fin, en utilisant -m, quelque chose comme ceci:

git tag -a 1.0.2 e50f795 -m "my message"

Après tout, vous devez le pousser vers le remote. Pour ce faire, procédez comme suit:

git Push Origin 1.0.2 

Si vous avez plusieurs balises que vous ne voulez pas mentionner une à une, faites simplement:

git Push Origin --tags

pousser toutes les balises ensemble ...

De plus, j’ai créé les étapes dans l’image ci-dessous, pour plus de précisions: creating tag on a commit hash

Vous pouvez également dd la balise dans Hub ou à l'aide d'outils tels que SourceTree , pour éviter les étapes précédentes, je me suis connecté à mon Bitbucket dans ce cas et je l'ai fait à partir de là:

  1. Allez dans votre branche et trouvez le commit auquel vous souhaitez ajouter le tag et cliquez dessus:

find your commit in bitbucket

  1. Dans la page de validation , à droite, recherchez le code No tags et cliquez sur l'icône +:

find where it says No tags

  1. Dans la zone du nom de la balise, ajoutez votre balise:

add tag name

  1. Vous voyez maintenant que la balise a été créée avec succès:

enter image description here

21
Alireza

C'est une vieille question, et les réponses donnaient déjà tout le travail, mais il y a aussi une nouvelle option qui peut être envisagée.

Si vous utilisez SourceTree pour gérer vos référentiels git, vous pouvez cliquer avec le bouton droit de la souris sur n'importe quel commit et y ajouter une balise. Avec un autre clic de souris, vous pouvez également envoyer le tag directement à la succursale d’origine.

10
Stephan Bijzitter

En vous basant sur les réponses des autres, voici une solution à une ligne qui définit la date de balise au moment où cela s’est réellement produit, utilise une balise annotée et ne requiert aucun git checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git Push --tags Origin master

tag est défini sur la chaîne de balise souhaitée et commit sur le hachage de validation.

4
stason

Le réponse par @Phrogz est génial, mais ne fonctionne pas sous Windows. Voici comment baliser un ancien commit avec la date d'origine du commit à l'aide de Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
2
ccoxtn