Annuler git pull, comment ramener les pensions à l’ancien état
-
11-07-2019 - |
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?
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
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 : 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.