Question

Existe-t-il un moyen de revenir en arrière ou d'annuler git pull afin que ma source / repo revienne à l'ancien état qui était avant de faire git pull? Je veux le faire car il a fusionné certains fichiers que je ne voulais pas, mais uniquement les autres fichiers fusionnés. Donc, je veux récupérer ces fichiers, est-ce possible? Merci:)

EDIT Je veux annuler la fusion de git pour clarification. Après avoir vu des réponses, je l’ai fait

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

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

Était-ce utile?

La solution

git pull fera deux choses: il fera un git fetch puis un git fusion où il fusionnera les branches configurées être fusionné dans votre configuration.

Donc, vous voulez annuler la fusion (annuler l'extraction n'a pas beaucoup de sens et ne devrait pas être nécessaire).

Pour ce faire, vous pouvez utiliser git reset --hard pour rétablir l'état précédent. Utilisez la git-reflog pour rechercher la SHA-1 de l'état précédent, puis réinitialisé.

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

Autres conseils

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 méthode plus moderne pour annuler une fusion est la suivante:

git merge --abort

Et à la manière un peu plus ancienne:

git reset --merge

La méthode de l'ancienne école décrite dans les réponses précédentes (avertissement: toutes vos modifications locales seront ignorées):

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 échouée, en l'absence de MERGE_HEAD , cette fusion peut être annulée avec git reset --merge mais pas nécessairement avec git merge - -abort , donc ils ne sont pas seulement l'ancienne et la nouvelle syntaxe pour la même chose . C’est pourquoi je trouve que git reset --merge est beaucoup plus utile au travail quotidien.

ça marche première utilisation: git reflog

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

git reset --hard HEAD@{1}

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

Supposons que $ COMMIT soit le dernier identifiant de validation avant l'exécution de git pull . Ce dont vous avez besoin pour annuler le dernier coup est

git reset --hard $ COMMIT

.

Bonus:

En parlant d’attraction, je voudrais partager une astuce intéressante,

git pull --rebase

Cette commande ci-dessus est la commande la plus utile de ma vie, 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 + une 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 réinitialiser git --hard ORIG_HEAD

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

C’est le moyen le plus simple de revenir en arrière.

git reset --hard 9573e3e0

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 : conserve les fichiers récupérés, mais annule 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 dans toute autre réponse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top