Existe-t-il un moyen de rétablir ou d'annuler git pull pour que ma source / repos revienne à son état antérieur à celui de git pull? Je veux le faire parce qu'il a fusionné certains fichiers que je ne voulais pas faire, mais seulement fusionner les autres fichiers restants. Donc, je veux récupérer ces fichiers, est-ce possible?
EDIT: Je veux annuler git merge pour clarification. Après avoir vu quelques 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? Ça git reset --hard
va? Je ne veux pas le visser à nouveau, donc demander des étapes détaillées?
git
version-control
git-merge
seg.server.fault
la source
la source
git reset --hard 01b34fa
dans ce cas, vous auriez pu effectuer lagit reset --hard HEAD^
réinitialisation d'un commit avant le HEAD.git reflog
montrera tout ce qui a été fait avec git. Il y a une préoccupation quigit reset --hard [sha1 of something from reflog]
inversera tout ce qui est montré dansreflog
, ce qui n'est parfois pas un objectif, par exemple. vous souhaitez annuler la fusion sur la branche principale extraite de l'origine avec des données incorrectes (se produit), et après cette fusion, vous avez travaillé sur d'autres branches.reflog
affichera chaque chage sur d'autres branches. Maisgit checkout master
etgit reset --hard [SH1 of commit on master branch just before merge]
ne réinitialisera que la branche principale actuelle supprimant la fusion extraite de l'origine.Réponses:
L'exécution
git pull
exécute les tâches suivantes, dans l'ordre:git fetch
git merge
L'étape de fusion combine les branches qui ont été configurées pour être fusionnées dans votre configuration. Vous voulez annuler l' étape de fusion , mais probablement pas la récupération (cela n'a pas beaucoup de sens et ne devrait pas être nécessaire).
Pour annuler la fusion , utilisez
git reset --hard
pour réinitialiser le référentiel local à un état précédent; utilisez git-reflog pour trouver le SHA-1 de l'état précédent, puis réinitialisez-le.Attention
Les commandes répertoriées dans cette section suppriment toutes les modifications non validées, entraînant potentiellement une perte de travail:
Vous pouvez également réinitialiser à un moment particulier, tel que:
la source
master@{1}
, qui est la position précédentemaster
,master@{"5 minutes ago"}
oumaster@{14:30}
. Tous les détails sur la spécification des révisions de cette manière peuvent être trouvés dansman git-rev-parse
, dans la section intitulée "spécification des révisions".Updating d2c90a3..035ac4d
. Ici, vous pouvez également utiliserd2c90a3
comme paramètre pour réinitialiser.Identique à la réponse de jkp, mais voici la commande complète:
où a0d3fe6 est trouvé en faisant
et en regardant le point auquel vous souhaitez annuler.
la source
git reset HEAD --hard
, par exemple?git reset --hard HEAD@{n}
travaillégit reflog
: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} et bbbbbbb HEAD @ {2}. Si je le fais,git reset --hard bbbbbbb
je perdrai les HEAD 0 et 1?Une façon plus moderne d'annuler une fusion est la suivante:
Et la façon un peu plus ancienne:
La méthode à l'ancienne décrite dans les réponses précédentes (avertissement: supprimera toutes vos modifications locales):
Mais en fait, il convient de noter que ce
git merge --abort
n'est que l'équivalent de cegit reset --merge
quiMERGE_HEAD
est présent. Cela peut être lu dans la commande git help for merge.Après une fusion qui a échoué, quand il n'y en a pas
MERGE_HEAD
, la fusion qui a échoué peut être annuléegit reset --merge
mais pas nécessairement avecgit merge --abort
, donc ils ne sont pas seulement une ancienne et une nouvelle syntaxe pour la même chose . C'est pourquoi je trouvegit reset --merge
être beaucoup plus utile dans le travail quotidien.la source
git merge --abort
fonctionne PENDANT une fusion, pas après lagit pull
fin. Cette réponse ne semble donc pas pertinente pour la question.git reset --merge
supprime toutes les modifications non mises en scène pour la validation. J'ai découvert ça à la dure.cela fonctionne première utilisation:
git reflog
trouver votre SHA de votre état précédent et faire (HEAD @ {1} est un exemple)
la source
Si vous avez gitk (essayez d'exécuter "gitk --all depuis votre ligne de commande git"), c'est simple. Il suffit de l'exécuter, sélectionnez le commit que vous souhaitez restaurer (clic droit) et sélectionnez "Réinitialiser la branche principale ici". Si vous n'avez aucune modification non validée, choisissez l'option "hard".
la source
Supposons que ce
$COMMIT
soit le dernier ID de validation avant que vous ayez effectuégit pull
. Ce dont vous avez besoin pour annuler la dernière traction estgit reset --hard $COMMIT
.
Prime:
En parlant de pull, je voudrais partager une astuce intéressante,
git pull --rebase
Cette commande ci-dessus est la commande la plus utile de ma vie git qui a permis de gagner beaucoup de temps.
Avant de pousser votre nouveau commit sur le serveur, essayez cette commande et elle synchronisera automatiquement les dernières modifications du serveur (avec fetch + merge) et placera votre commit en haut dans git log. Pas besoin de vous soucier de l'extraction / fusion manuelle.
Plus de détails sur: http://gitolite.com/git-pull--rebase
la source
Il s'agit de la manière la plus simple d'annuler les modifications.
Veuillez sauvegarder vos fichiers modifiés car cela supprimera les fichiers et dossiers nouvellement créés .
Où
9573e3e0
est votre {ID de validation}la source
Updating ffce65bd..e929e884
, le fairegit reset --hard ffce65bd
tu peux faire
git reset --hard ORIG_HEAD
depuis "pull" ou "merge", définissez ORIG_HEAD comme étant l'état actuel avant de faire ces actions.
la source
git pull do ci-dessous opération.
Pour annuler l'extraction, effectuez une opération:
Amélioration:
La prochaine fois, utilisez
git pull --rebase
au lieu degit pull
.. son serveur de synchronisation changera en faisant (chercher et fusionner).la source
S'il y a échec d'une fusion, qui est la raison la plus courante pour vouloir annuler une
git pull
, l'exécutiongit reset --merge
fait exactement ce à quoi on peut s'attendre: conserver les fichiers récupérés, mais annuler la fusion qui agit pull
tenté de fusionner. Ensuite, on peut décider quoi faire sans l'encombrement quigit merge
se produit parfois. Et il n'en a pas besoin pour trouver l'ID de validation exact--hard
mentionné dans toutes les autres réponses.la source