Comment restaurer la branche master en tag dans git?

89

Nous avons des branches d'origine et de développement. L'état initial du maître a été marqué à tag_ABC.

Nous avons peu de changements apportés à la branche de développement et poussés à l'origine. Ensuite, nous avons accidentellement fusionné develop en master et poussé à l'origine.

Maintenant, nous aimerions ramener le maître au point de contrôle tag_ABC. Comment peut-on faire ça?

Manjunath Manoharan
la source

Réponses:

161

Tu peux faire

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

Veuillez noter que cela écrasera l'historique existant dans le dépôt en amont et peut causer des problèmes aux autres développeurs qui ont extrait ce dépôt.

Paweł Obrok
la source
5
De cette façon, toutes les branches seront poussées avec force. Vous voudrez peut-être essayergit push --force origin master
danza
1
Pour référence, pour revenir au commit précédent, vous pouvez faire ungit reset --hard HEAD^
Geoff
1
BTW git reset --hard HEAD^peut être utilisé plusieurs fois pour reculer d'un commit à la fois, puis s'il est à distance, il git push --force origin masterpeut être utilisé.
Luke Wenke
Également pour réinitialiser la branche principale des copies locales d'autres personnes à l'utilisation de la version antérieure git pulletgit reset --hard origin/master
Luke Wenke
Un petit conseil après ce retour, pourrait être dit à l'équipe: tirez de la branche master !! Merci!!
JRichardsz
89

Ce n'est pas une réponse directe à la question, mais cette page revient lorsque vous recherchez des moyens de rétablir le code d'une branche en une version de tag.

Une autre méthode consiste à créer un différentiel entre l'état actuel de la branche et la balise à laquelle vous souhaitez revenir, puis à l'appliquer à la branche. Cela maintient l'historique des versions correct et montre les modifications en cours puis en réapparition.

En supposant que votre branche s'appelle master et que la balise à laquelle vous souhaitez revenir s'appelle 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
la source
19
Cela devrait être la réponse acceptée car elle garde l'historique intact et ne pose pas de problèmes aux autres personnes qui ont extrait le dépôt.
OpenUserX03
1
Cela semble élégant. Mais j'ai essayé de rétablir la branche qa sur une balise précédente et je viens de recevoir des messages d'échec de patch. $ cat ../diff_qa.patch | git apply <stdin>: 55: espace blanc de fin. <stdin>: 336: espace blanc de fin. <stdin>: 12692: espace blanc de fin. <stdin>: 12695: espace blanc de fin. <li> {{$ tag ['rank'] + 1}}: <stdin>: 12706: espace blanc de fin. erreur: le correctif a échoué: .env.wholo: 1
rickatech
J'ai essayé plusieurs solutions, mais aucune n'a fonctionné. Celui-ci a fonctionné comme un charme. Merci beaucoup @John
Strabek
C'est la bonne manière de procéder. C'est non destructif et préserve l'histoire complète
Nitin Bansal
Cela ne fonctionne pas pour moi. Je peux exécuter les 3 premières commandes sans aucun problème, mais quand je le fais cat ~/diff.patch | git apply, cela me le dit error: unrecognized input. Une idée? @NitinBansal peut-être depuis que vous avez commenté récemment?
Expérience111 le