web-dev-qa-db-fra.com

Annuler git pull, comment ramener les pensions à l’ancien état

Existe-t-il un moyen de restaurer ou d'annuler git pull afin que ma source/repo revienne à l'ancien état qui était avant de le faire? , mais seulement fusionner les autres fichiers restants. Donc, je veux récupérer ces fichiers, est-ce possible??. Merci :)

EDIT je veux annuler git merge pour clarification ... Après avoir vu quelques réponses, j’ai fait ceci 

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

Maintenant, que dois-je faire? Faire git reset --hard est OK? Je ne veux pas le visser encore, donc demandant des étapes détaillées? 

807
seg.server.fault

git pull fera deux choses: il crée un git fetch, puis un git merge, dans lequel il fusionne les branches configurées pour être fusionnées dans votre configuration.

Donc, ce que vous voulez faire est d'annuler la fusion (annuler l'annulation n'a pas beaucoup de sens et ne devrait pas être nécessaire). 

Pour ce faire, vous pouvez essayer d'utiliser git reset --hard pour rétablir l'état précédent. Utilisez la commande git-reflog pour trouver le SHA-1 de l’état précédent, puis réinitialisez-le.

Warning: git reset --hard supprime toutes les modifications non validées. 

1128
jkp

Identique à la réponse de jkp, mais voici la commande complète:

git reset --hard a0d3fe6

où a0d3fe6 est trouvé en faisant

git reflog

et en regardant le point auquel vous voulez annuler. 

260
Jeffrey Sun

Une façon plus moderne d'annuler une fusion est la suivante:

git merge --abort

Et la manière un peu plus ancienne:

git reset --merge

La méthode de la vieille école décrite dans les réponses précédentes (avertissement: éliminera tous vos changements locaux):

git reset --hard

Mais en réalité, il convient de noter que git merge --abort n’est équivalent qu’à git reset --merge étant donné que MERGE_HEAD est présent. Cela peut être lu dans l'aide de git pour la commande de fusion.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Après une fusion ayant échoué, en l'absence de MERGE_HEAD, celle-ci peut être annulée avec git reset --merge mais pas nécessairement avec git merge --abort, afin qu'elles ne constituent pas seulement une ancienne et une nouvelle syntaxe pour la même chose . C'est pourquoi je trouve que git reset --merge est beaucoup plus utile dans le travail quotidien.

89
Martin G

ça marche première utilisation: git reflog

trouver votre SHA de votre état précédent et faire (HEAD @ {1} est un exemple)

git reset --hard HEAD@{1}
46
Ezequiel García

Si vous avez gitk (essayez de lancer "gitk --all depuis votre ligne de commande git"), c'est simple. Il suffit de l’exécuter, de sélectionner le commit sur lequel vous souhaitez revenir (clic droit), puis de sélectionner "Réinitialiser la branche principale ici". Si vous n'avez pas de modifications non validées, choisissez l'option "Difficile".

37
Samuel Carrijo

Supposons que $COMMIT soit le dernier identifiant de validation avant que vous ayez effectué git pull. Ce dont vous avez besoin pour annuler le dernier tirage est

git reset --hard $COMMIT

.

Prime:

En parlant d’attraction, je voudrais partager un tour intéressant,

git pull --rebase

Cette commande ci-dessus est la commande la plus utile dans ma vie de git qui a permis de gagner beaucoup de temps.

Avant d'envoyer votre nouveau commit sur le serveur, essayez cette commande. Elle synchronisera automatiquement les dernières modifications apportées au serveur (avec une récupération + fusion) et placera votre commit en haut de la liste dans le journal git. Pas besoin de s'inquiéter de l'extraction/fusion manuelle.

Vous trouverez des détails sur: http://gitolite.com/git-pull--rebase

24
Sazzad Hissain Khan

vous pouvez faire git reset --hard ORIG_HEAD

depuis "pull" ou "merge", définissez ORIG_HEAD sur l'état actuel avant d'effectuer ces actions.

10
Orlando

C’est le moyen le plus simple d’annuler vos modifications.

git reset --hard 9573e3e0

9573e3e0 est votre {Identifiant de validation}

5
Manish Goswami

En cas d'échec de la fusion, qui est la raison la plus courante de vouloir annuler un git pull, exécuter git reset --merge fait exactement ce à quoi on pourrait s'attendre: conserver les fichiers extraits mais annuler la fusion que git pull a tenté de fusionner. Ensuite, on peut décider quoi faire sans le fouillis que git merge génère parfois. Et il n’en a pas besoin pour trouver l’ID de validation exact requis par --hard mentionné dans toutes les autres réponses.

0
Davide