Como faço para reverter o branch master para uma tag no git?

89

Temos ramos de origem e desenvolvimento. O estado inicial do mestre foi marcado em tag_ABC.

Temos poucas alterações feitas no branch de desenvolvimento e enviadas para a origem. Então, acidentalmente fundimos o desenvolvimento no mestre e o empurramos para a origem.

Agora gostaríamos de reverter o mestre para o ponto de verificação tag_ABC. Como podemos fazer isso?

Manjunath Manoharan
fonte

Respostas:

161

Você pode fazer

git checkout master
git reset --hard tag_ABC
git push --force origin master

Observe que isso sobrescreverá o histórico existente no repositório upstream e pode causar problemas para outros desenvolvedores que fizeram check-out deste repositório.

Paweł Obrok
fonte
5
Desta forma, todos os ramos serão empurrados com força. Você pode querer tentargit push --force origin master
danza
1
Para referência, para reverter para o commit anterior, você pode fazer umgit reset --hard HEAD^
Geoff
1
BTW git reset --hard HEAD^pode ser usado várias vezes para retroceder um commit por vez, então se for remoto, git push --force origin masterpode ser usado.
Luke Wenke
Também para redefinir o branch master das cópias locais de outras pessoas para a versão anterior, use git pullegit reset --hard origin/master
Luke Wenke
Um pequeno conselho após esta reversão, poderia ser dito à equipe: puxe do branch master !! Obrigado!!
JRichardsz
89

Esta não é uma resposta direta à pergunta, mas esta página volta ao pesquisar maneiras de reverter o código de um branch para uma liberação de tag.

Outra forma é criar uma diferença entre o estado atual da ramificação e a tag para a qual você deseja reverter e então aplicá-la à ramificação. Isso mantém o histórico de versões correto e mostra as mudanças que entram e saem novamente.

Supondo que seu ramo seja chamado de mestre e a tag para a qual você deseja voltar seja 1.1.1

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master
John
fonte
19
Essa deve ser a resposta aceita, pois mantém o histórico intacto e não causa problemas para outras pessoas que fizeram o check-out do repo.
OpenUserX03
1
Isso parece elegante. Mas tentei reverter qa branch para uma tag anterior e apenas recebi mensagens de falha de patch. $ cat ../diff_qa.patch | git apply <stdin>: 55: espaço em branco à direita. <stdin>: 336: espaço em branco à direita. <stdin>: 12692: espaço em branco à direita. <stdin>: 12695: espaço em branco à direita. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: espaço em branco à direita. erro: falha no patch: .env.wholo: 1
rickatech
Tentei várias soluções, mas nenhuma funcionou. Este funcionou como um encanto. Muito obrigado @John
Strabek
Esta é a maneira correta de fazer. Não é destrutivo e preserva toda a história
Nitin Bansal,
Isso não funciona para mim. Posso executar os 3 primeiros comandos sem nenhum problema, mas quando o faço cat ~/diff.patch | git apply, ele me diz error: unrecognized input. Qualquer ideia? @NitinBansal talvez já que você comentou recentemente?
Experience111 de