Como você reverte para uma tag específica no Git?


86

Eu sei como reverter para commits mais antigos em um branch Git, mas como faço para reverter para o estado de um branch ditado por uma tag? Eu imagino algo assim:

git revert -bytag "Version 1.0 Revision 1.5"

Isso é possível?


Você quer "retroceder o branch" (ou seja, remover commits), ou adicionar um novo commit ao branch atual, que configure o branch de forma que todos os arquivos sejam "da maneira que estavam no commit dado por aquela tag"?
Torek de

Ambos devem terminar o trabalho, embora eu prefira adicionar um novo commit ao branch atual da maneira que você descreve
zachd1_618

Nesse caso, use o git checkout <id> .método desta resposta .
rasgou em

Respostas:


133

As tags Git são apenas ponteiros para o commit. Então você os usa da mesma maneira que você faz HEAD, nomes de branch ou commit sha hashes. Você pode usar tags com qualquer comando git que aceite argumentos de confirmação / revisão. Você pode tentar com git rev-parse tagnamepara exibir o commit para o qual aponta.

No seu caso, você tem pelo menos estas duas alternativas:

  1. Redefina o branch atual para uma tag específica:

    git reset --hard tagname
    
  2. Gere o commit de reversão no topo para chegar ao estado da tag:

    git revert tag
    

Isso pode introduzir alguns conflitos se você tiver commits de mesclagem.


30
Eu acho que "git revert <tag>" reverte as mudanças no commit marcado, ao invés de restaurar sua cópia de trabalho para aquela versão.
Matt

Para também se livrar de arquivos não rastreados / não versionados, siga stackoverflow.com/a/912737/923560
Abdull de

3
Como @Matt disse, a resposta aceita é simplesmente incorreta, pois apenas reverte as mudanças no commit marcado. Sua melhor aposta é usar hashes de commit e siga esta resposta: stackoverflow.com/a/4114122/6348485
Swagga Ting

Olá, você poderia explicar "gerar confirmação de reversão no topo para levá-lo ao estado da tag:"? Não tenho ideia do que isso significa, infelizmente.
John Little de

12

Use git reset :

git reset --hard "Version 1.0 Revision 1.5"

(assumindo que a string especificada é a tag).


1

Você pode usar o git checkout.

Tentei a solução aceita, mas obtive um erro, warning: refname '<tagname>' is ambiguous'

Mas, como afirma a resposta, as tags se comportam como um ponteiro para um commit, então como você faria com um hash de commit, você pode simplesmente verificar a tag. A única diferença é que você o inicia com tags/:

git checkout tags/<tagname>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.