Come faccio a ripristinare il ramo principale in un tag in git?


87

Abbiamo origine e sviluppo di rami. Lo stato iniziale del master è stato contrassegnato in tag_ABC.

Abbiamo poche modifiche apportate al ramo di sviluppo e trasferito all'origine. Poi abbiamo accidentalmente fuso lo sviluppo in master e ci siamo spinti all'origine.

Ora vorremmo riportare il master al checkpoint tag_ABC. Come possiamo farlo?

Risposte:


159

Tu puoi fare

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

Si noti che questo sovrascriverà la cronologia esistente nel repository upstream e potrebbe causare problemi ad altri sviluppatori che hanno estratto questo repository.


5
In questo modo tutti i rami verranno spinti con forza. Potresti provaregit push --force origin master
danza

1
Per riferimento, per tornare al commit precedente, puoi eseguire ungit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^può essere utilizzato più volte per tornare indietro di un commit alla volta, quindi se è in remoto, git push --force origin masterpuò essere utilizzato.
Luke Wenke

Anche per ripristinare il ramo principale delle copie locali di altre persone alla versione precedente, usa git pullegit reset --hard origin/master
Luke Wenke

Un piccolo consiglio dopo questo ripristino, potrebbe essere detto al team: tirare dal ramo master !! Grazie!!
JRichardsz

89

Questa non è una risposta diretta alla domanda, ma questa pagina ritorna quando si cercano modi per ripristinare il codice di un ramo in un rilascio di tag.

Un altro modo è creare una differenza tra lo stato corrente del ramo e il tag a cui si desidera ripristinare e quindi applicarlo al ramo. Ciò mantiene la cronologia delle versioni corretta e mostra le modifiche in atto per poi tornare indietro.

Supponendo che il tuo ramo si chiami master e il tag a cui vuoi tornare si chiami 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

19
Questa dovrebbe essere la risposta accettata poiché mantiene intatta la cronologia e non causa problemi ad altri che hanno verificato il repository.
OpenUserX03

1
Questo sembra elegante. Ma ho provato a ripristinare il ramo qa a un tag precedente e ho appena ricevuto messaggi di patch fail. $ cat ../diff_qa.patch | git apply <stdin>: 55: spazi vuoti finali. <stdin>: 336: spazi vuoti finali. <stdin>: 12692: spazi vuoti finali. <stdin>: 12695: spazi vuoti finali. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: spazi vuoti finali. errore: patch non riuscita: .env.wholo: 1
rickatech

Ho provato diverse soluzioni, ma nessuna ha funzionato. Questo ha funzionato a meraviglia. Grazie mille @John
Strabek

Questo è il modo corretto di farlo. Non è distruttivo e preserva la storia completa
Nitin Bansal

Questo non funziona per me. Posso eseguire i primi 3 comandi senza alcun problema, ma quando lo faccio cat ~/diff.patch | git apply, me lo dice error: unrecognized input. Qualche idea? @NitinBansal forse visto che hai commentato di recente?
Experience111
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.