2017-05-05 8 views
0

J'ai fusionné une branche distante dans mon dépôt local et j'ai créé 26 commits locaux.Comment annuler les dernières validations locales dans Git et revenir à l'état distant?

Maintenant, je veux inverser cette fusion, mais il pense qu'il est assez ennuyeux et sensible à l'erreur de rétablir les validations 1 par 1 ou de chercher la dernière validation de la version à distance pour y revenir.

Je suis passé par le poste How to undo last commit(s) in Git? ce qui est très intéressant avec ses réponses, mais je n'ai pas trouvé de moyen simple de faire mon retour local.

Quelqu'un peut-il aider?

Répondre

1

Utilisez Git Log & Git Réinitialiser

git log 

cela vous donnera l'id engager avec le message à travers lequel vous pouvez identifier votre engagement id. Utilisez l'ID de validation pour réinitialiser.

git reset <commit-id> 

si vous souhaitez définitivement revenir à cette validation. vous pouvez utiliser ce qui suit.

git reset --hard <commit-id> 
+0

Vous pouvez réinitialiser à une branche Astuce, de sorte que vous pouvez faire 'git reset --hard origine/master' pour réinitialiser à tout ce que le maître était à votre origine à distance la dernière fois que vous avez parlé à cette télécommande. –

+0

@ LasseV.Karlsen Il peut ne pas être valide de supposer que origin/master aurait le même identifiant de validation que l'OP n'a pas mentionné que origin/master et la branche locale étaient synchronisés. – harshitpthk

+0

ok, mais je cherchais une solution sans utiliser les ID commid, et comme je fusionne ** dans ** ma branche locale, mon but est de retourner à l'état distant de cette branche exacte. Donc grâce à @Lasse V. Karlsen @ "Lasse V. Karlsen" – geekobi

0

J'ai essayé une ou deux choses et celui-ci est un peu sale, mais il est simple et semble fonctionner:

  • caisse à une autre branche (créer un si aucun): git checkout -b tempo
  • enlever la mauvaise branche locale: git branch -D dirty_one
  • recréent la branche locale synchronisée avec une seule télécommande: git checkout -b dirty_one origin/dirty_one

et c'est tout.

La chose sale je pense est que les mauvais commits locaux sont toujours dans le repo local, mais la branche ne les connaît pas afin qu'ils puissent rester cachés.

Si je refais ma fusion (que je l'ai fait en fait), la fusion fonctionne juste bien, mais je ne sais pas exactement comment (que la partie sale ...)