Come taggare un commit precedente in Git?


949

Siamo nuovi di Git e voglio impostare un tag all'inizio del nostro repository. Il nostro codice di produzione è uguale al repository iniziale, ma da allora abbiamo effettuato dei commit. Un tag all'inizio ci consentirebbe di "ripristinare" la produzione a uno stato noto e stabile.

Quindi, come aggiungere un tag a un commit arbitrario e più vecchio?


Sono venuto qui in cerca di aiuto per eliminare un vecchio tag localmente e su un telecomando e alla fine l'ho trovato utile, forse aiuterà anche qualcun altro: gist.github.com/mobilemind/7883996
Aleksander Lidtke,

1
E non dimenticare Come spingere un tag in un repository remoto usando Git? perché Git non invierà un tag senza fare qualcosa di speciale.
jww

Risposte:


1511

Esempio:

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

Dov'è 9fceb02la parte iniziale dell'ID commit.

È quindi possibile inviare il tag utilizzando git push origin v1.2.

Puoi fare git logper mostrare tutti gli ID di commit nel tuo ramo attuale.

C'è anche un buon capitolo sulla codifica del libro Pro Git.

Avvertenza: questo crea tag con la data corrente (e quel valore è ciò che verrà mostrato nella pagina delle versioni di GitHub, per esempio). Se vuoi che il tag sia datato con la data di commit, guarda un'altra risposta .


45
Puoi anche farlo nel menu di scelta rapida in gitk - comodo se è così che trovi lo SHA1 comunque.
Cascabel,

62
Omettere il -ae le -m "Message here"parti se non si desidera aggiungere un messaggio:git tag v1.2 9fceb02
devius

3
Puoi anche utilizzare l'ID commit completo.
j08lue,

1
@devius Qual è la differenza tra l'utilizzo di -ae -m. La pagina man sembra dire -aimplicita quando -mviene usata.
John Strood,

7
git push --tags origin masterspingerebbe tutti i tag sul ramo locale su remoto. Preferisci git push origin <tag_name>semplicemente spingere il tag creato. Fare riferimento: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet

144

Solo il codice

# 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

Dettagli

La risposta di @dkinzer crea tag la cui data è la data corrente (quando è stato eseguito il git tagcomando), non la data del commit. La guida di Git per tagha una sezione "Sui tag di backdating" che dice:

Se hai importato alcune modifiche da un altro VCS e desideri aggiungere tag per le versioni principali del tuo lavoro, è utile poter specificare la data da incorporare all'interno dell'oggetto tag; tali dati nell'oggetto tag influiscono, ad esempio, sull'ordinamento dei tag nell'interfaccia di gitweb.

Per impostare la data utilizzata nei futuri oggetti tag, impostare la variabile di ambiente GIT_COMMITTER_DATE(vedere la discussione successiva dei possibili valori; la forma più comune è "AAAA-MM-GG HH: MM").

Per esempio:

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

La pagina "Come taggare in Git" ci mostra che possiamo estrarre il tempo del commit HEAD tramite:

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

Potremmo estrarre la data di un commit specifico tramite:

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

Tuttavia, invece di ripetere due volte il commit, sembra più semplice cambiare HEAD in quel commit e usarlo implicitamente in entrambi i comandi:

git checkout 9fceb02 

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

4
@ColonelPanic, il tuo desiderio è il mio comando! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas

Se usi Github per gestire le versioni e ti preoccupi della data mostrata nella pagina / tag del tuo progetto, l'impostazione di GIT_COMMITTER_DATE è particolarmente importante!
Lesley,

2
@ColonelPanic Ti ho dato un voto per il gioco di parole, e vorrei poterti dare un secondo per il codice, ma una stella github dovrà fare.
Andyhasit,

96

Il modo più semplice per farlo è:

git tag v1.0.0 f4ba1fc

con f4ba1fcessendo l'inizio del hash del impegnano che si desidera tag e v1.0.0di essere la versione che si desidera tag.


Perfetto grazie :).
Saleh Enam Shohag,


36

OK , puoi semplicemente fare:

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

Quindi, se vuoi aggiungere il tag: 1.0.2 per eseguire il commit e50f795, fai semplicemente:

git tag -a 1.0.2 e50f795

Inoltre aggiungi un messaggio alla fine, usando -mqualcosa del genere:

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

Dopotutto, devi spingerlo verso il remote, per farlo, fai semplicemente:

git push origin 1.0.2 

Se hai molti tag che non vuoi menzionare uno per uno, fai semplicemente:

git push origin --tags

per mettere insieme tutti i tag ...

Inoltre, ho creato i passaggi nell'immagine seguente, per ulteriori chiarimenti sui passaggi: creando tag su un hash di commit

Puoi anche dd il tag in Hub o usando strumenti come SourceTree , per evitare i passaggi precedenti, in questo caso ho effettuato l'accesso al mio Bitbucket e facendolo da lì:

  1. Vai alla tua filiale e trova il commit a cui desideri aggiungere il tag e fai clic su di esso:

trova il tuo commit in bitbucket

  1. Nella pagina di commit , a destra, trova dove dice No tagse fai clic +sull'icona:

trova dove dice No tags

  1. Nella casella Nome tag, aggiungi il tag:

aggiungi il nome del tag

  1. Ora vedi che il tag è stato creato correttamente:

inserisci qui la descrizione dell'immagine


11

Questa è una vecchia domanda e le risposte hanno già dato tutto il lavoro, ma c'è anche una nuova opzione che può essere considerata.

Se stai usando SourceTree per gestire i tuoi repository git, puoi fare clic con il tasto destro su qualsiasi commit e aggiungere un tag ad esso. Con un altro clic del mouse puoi anche inviare il tag direttamente al ramo sull'origine.


6

Sulla base delle risposte degli altri, ecco una soluzione one-liner che imposta la data del tag su quando è effettivamente accaduto, utilizza un tag annotato e non richiede 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

dove tagè impostato sulla stringa tag desiderata e commitsull'hash di commit.


3

La risposta di @Phrogz è ottima, ma non funziona su Windows. Ecco come taggare un vecchio commit con la data originale del commit usando Powershell:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.