Come si ripristina un tag specifico in Git?


86

So come ripristinare i commit più vecchi in un ramo Git, ma come faccio a tornare allo stato di un ramo dettato da un tag? Immagino qualcosa di simile:

git revert -bytag "Version 1.0 Revision 1.5"

È possibile?


Vuoi "riavvolgere il ramo" (cioè rimuovere i commit), o aggiungere un nuovo commit al ramo corrente, che configuri il ramo in modo che tutti i file siano "come erano al commit dato da quel tag"?
torek

O dovrebbe portare a termine il lavoro, anche se penso che preferirei aggiungere un nuovo commit al ramo corrente nel modo in cui descrivi
zachd1_618

In tal caso, usa il git checkout <id> .metodo da questa risposta .
torek

Risposte:


133

I tag Git sono solo puntatori al commit. Quindi li usi allo stesso modo di HEAD, nomi di rami o commit sha hash. Puoi usare i tag con qualsiasi comando git che accetti argomenti di commit / revisione. Puoi provarlo con git rev-parse tagnameper visualizzare il commit a cui punta.

Nel tuo caso hai almeno queste due alternative:

  1. Reimposta il ramo corrente su un tag specifico:

    git reset --hard tagname
    
  2. Genera il commit di ripristino in alto per portarti allo stato del tag:

    git revert tag
    

Tuttavia, questo potrebbe introdurre alcuni conflitti se si dispone di commit di unione.


30
Penso che "git revert <tag>" ripristini le modifiche nel commit taggato, invece di ripristinare la tua copia di lavoro a quella versione.
Matt

Per anche sbarazzarsi di file non monitorate / controllo di versione, seguire stackoverflow.com/a/912737/923560
Abdull

3
Come ha detto @Matt, la risposta accettata è semplicemente errata, poiché ripristina solo le modifiche nel commit taggato. La soluzione migliore è usare hash di commit e seguire questa risposta: stackoverflow.com/a/4114122/6348485
Swagga Ting

Salve, potresti spiegare "genera il commit di ripristino in alto per portarti allo stato del tag:"? Non ho idea di cosa significhi purtroppo.
John Little,

12

Usa git reset :

git reset --hard "Version 1.0 Revision 1.5"

(assumendo che la stringa specificata sia il tag).


1

Puoi utilizzare git checkout.

Ho provato la soluzione accettata ma ho ricevuto un errore, warning: refname '<tagname>' is ambiguous'

Ma come afferma la risposta, i tag si comportano come un puntatore a un commit, quindi come faresti con un hash di commit, puoi semplicemente controllare il tag. L'unica differenza è che lo anteponi con tags/:

git checkout tags/<tagname>

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.