J'ai accidentellement poussé une branche de fonctionnalité vers le maître distant. Maintenant, je veux retourner le maître au commit précédent. Lorsque je sélectionne l'option «Revenir à la validation de la branche en cours», seule la branche locale est annulée et, comme le maître distant est en avance (push accidentel), je ne peux pas pousser le maître local qui vient d'être annulé vers la télécommande.
Lors de l’examen de ce problème sur SO et Google, j’ai constaté que de nombreuses personnes utilisent la force Push en utilisant la ligne de commande. Mais depuis que j'utilise l'arbre source, j'aimerais trouver un moyen d'utiliser réellement cet arbre.
J'ai aussi trouvé l'option rebase, mais je n'arrive pas à trouver un tutoriel pas à pas.
Des idées?
Lorsque vous appuyez sur une validation, le moyen le plus sûr de la rétablir (plutôt que de forcer Push avec -f) consiste à utiliser la fonction revert
. Ainsi, une nouvelle validation est créée par-dessus votre validation précédente.
Cela est possible en utilisant Sourcetree, en cliquant avec le bouton droit de la souris sur la validation que vous voulez annuler, et en sélectionnant "Reverse commit ...".
Vous devrez le faire pour chaque commit que vous voulez annuler, dans l'ordre inverse.
La meilleure façon de faire est d'utiliser l'option Reset <branch> to this commit
affichée dans l'image ci-dessous.
Une fenêtre contextuelle s’affiche pour vous indiquer le mode de réinitialisation du code que vous souhaitez choisir. [Voir ci-dessous]
Remarque:Ceci n'est pas exactement l'inversion de code, mais il supprime votre commit de la totalité du local et lui donne un aspect plus propre.
Sourcetree ne vous expose pas le drapeau -f
: https://answers.atlassian.com/questions/54469/how-do-i-perform-a-forced-Push-push-f--de-sourcetree
Ainsi, le seul moyen de ramener la télécommande à son état d'origine est de git revert
chaque commit que vous avez introduit dans l'ordre inverse.
En supposant que la télécommande était sur commit A
et que vous avez forcé votre branche à conserver les commits B
, C
et D
, vous devez
git revert D
git revert C
git revert B
git Push
La fonction Push fonctionnera correctement car vous ne modifiez pas l’historique transmis mais vous transmettez un nouvel ensemble de modifications.
Si vous voulez raccourcir votre série de retours à un commit, vous pouvez faire un
git rebase -i Origin/master
et sélectionnez chacun de vos revert
s'engage à être squashed
. Ensuite, votre Push
ne contiendra qu'un seul commit qui rétablira D
, C
et B
en une seule fois.