web-dev-qa-db-fra.com

Rétablir Push to remote avec Sourcet Tree

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?

14
Michael Kloet

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 ...".

 enter image description here

Vous devrez le faire pour chaque commit que vous voulez annuler, dans l'ordre inverse.

14
Jesús Carrera

La meilleure façon de faire est d'utiliser l'option Reset <branch> to this commit affichée dans l'image ci-dessous.

 Reset to previous commit

Une fenêtre contextuelle s’affiche pour vous indiquer le mode de réinitialisation du code que vous souhaitez choisir. [Voir ci-dessous]Choose the mode of reset

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.

1
LearnerAllTheWay

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.

0
eckes