46 votes

Défaire un mauvais tirage

Tout d'abord, Git craint. Je sais, je sais, c'est censé être la meilleure chose depuis le pain tranché, mais c'est nul. C'est comme essayer de se raser avec une tronçonneuse : une petite erreur et il y a du sang et des dents partout. Peut-être que si je pouvais faire une distinction exacte entre une tête, une référence, un commit, une branche, une tige, un gnargel et un whizpoo, tout cela serait un peu plus facile, mais pour un simple mortel qui n'a que 10 ans d'expérience de SVN, Perforce et RCS, tout cela ressemble à de la magie noire.

Maintenant, pour une raison quelconque, git pull n'a jamais fonctionné pour moi. Je reçois un message d'erreur de 10 lignes qui, jusqu'à présent, s'est avéré aussi utile que le mot "erreur". La recherche de ce message d'erreur sur Google a donné lieu à un large éventail de suggestions qui n'avaient en commun que le fait de n'avoir aucun effet apparent. Mais ce n'est pas le problème d'aujourd'hui : j'ai pris l'habitude de taper git pull origin branch .

Aujourd'hui, je faisais des allers-retours entre deux branches, "master" et "lounge" et en ce moment je me trouvais dans la branche master. Je voulais récupérer les dernières modifications du dépôt distant vers le dépôt local, mais j'ai fait une erreur de frappe. Au lieu d'écrire git pull origin master J'ai écrit git pull origin lounge et puis, sans réfléchir, a tapé la bonne commande.

Il n'y a aucune trace du premier (mauvais) tirage dans le journal, juste deux fusions depuis le master :

commit 0c6be9569bab0581244ea8603bf2edfee82cdd7b
Merge: 43fdec5... db09f0d...
Author: Malvolio <info@xcompanyx.com>
Date:   Wed Nov 24 20:38:58 2010 -0500

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit db09f0d79d744d6a354142041b47ff5d748999f3
Merge: 81b6c3d... fc73e25...
Author: Malvolio <info@xcompanyx.com>
Date:   Wed Nov 24 17:38:16 2010 -0800

Merge branch 'master' of github.com:xcompanyx/xRepositoryX

commit 81b6c3d04b7c464f8750a56282635526a5ef83a1
Author: Michael <info@xcompanyx.com>
Date:   Wed Nov 24 17:38:07 2010 -0800
    the last commit I did

Mais les fichiers nouvellement créés dans la branche lounge sont là dans mon dépôt.

Alors maintenant je suis foutu, non ? Devrais-je simplement brûler mon dépôt, cloner à nouveau le dépôt distant, réappliquer manuellement tous les changements non poussés, et mettre ça sur le compte de la nullité de Git ou y a-t-il une incantation que je peux réciter et qui va tout arranger ? Cela aiderait-il si je sacrifiais une chèvre ?

40voto

jtdubs Points 4952

Utilisez git reflog pour voir ce que ton HEAD indiquait avant que tu ne le fasses foirer.

Vous devriez voir quelque chose comme :

48ab8d HEAD@{0}: pull: Fast-forward
a34bda HEAD@{5}: commit: my last commit message

Maintenant, faites pointer votre branche principale vers le commit avant le mauvais pull :

git reset --hard a34bda

Fait. Comme si ça n'était jamais arrivé.

6voto

Jefromi Points 127932

Je ne peux pas comprendre totalement votre histoire à partir de votre question, mais en général, si vous faites deux fusions (un pull est une fusion), il est tout à fait simple d'en supprimer une.

- o - o - o - A - M1 - M2 (master)
                 /    /
      - o - o - o    /   (origin/lounge)
                    /
             - o - o (origin/master)

Le moyen le plus évident :

 git checkout master
 git reset --hard A
 git merge origin/master

Ceci utilise votre version du master d'origine mise en cache localement. Si vous voulez fusionner ce qui existe déjà, utilisez git pull origin master .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X