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?
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.
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.
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.
ç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}
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".
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
.
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
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.
C’est le moyen le plus simple d’annuler vos modifications.
git reset --hard 9573e3e0
Où 9573e3e0
est votre {Identifiant de validation}
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.