121 votes

Comment ignorer les modifications locales et extraire la dernière version du dépôt GitHub ?

J'ai un répertoire sur ma machine où je stocke tous les projets de GitHub. J'ai ouvert l'un d'entre eux et apporté des modifications localement sur ma machine. Le projet s'est embrouillé et je veux maintenant supprimer toutes les modifications que j'ai apportées et récupérer la dernière version du dépôt. Je suis relativement nouveau sur GitHub et j'utilise Git Shell.

Serait-ce git pull sera-t-elle suffisante ? Dois-je faire quelque chose de plus pour annuler les modifications apportées localement ? Quelqu'un peut-il m'aider ?

159voto

Cody Points 1505

Git reset est ce que vous voulez, mais je vais ajouter deux choses supplémentaires que vous pourriez trouver utiles et que les autres réponses n'ont pas mentionnées.

git reset --hard HEAD réinitialise vos changements au dernier commit que votre repo local a suivi. Si vous avez fait un commit, que vous ne l'avez pas poussé sur GitHub, et que vous voulez le jeter aussi, consultez le lien suivant @absiddiqueLive La réponse de la Commission.

git clean -df éliminera tous les nouveaux fichiers ou répertoires que vous avez ajoutés, au cas où vous voudriez les jeter. Si vous n'en avez pas ajouté, vous n'avez pas besoin d'exécuter cette commande.

git pull (ou si vous utilisez git shell avec le client GitHub) git sync recevra les nouvelles modifications de GitHub.

Edition de loin dans le futur : J'ai mis à jour mon shell git l'autre semaine et j'ai remarqué que l'option git sync n'est plus définie par défaut. Pour mémoire, taper git sync était équivalent à git pull && git push dans bash. Je trouve qu'il est toujours utile, donc il est dans mon bashrc.

0 votes

Rien de tout ça ne marche pour moi, je comprends : Veuillez les déplacer ou les supprimer avant de pouvoir fusionner.

0 votes

@StepanYakovenko Il semble que votre dépôt soit en train de tenter une fusion, ce qui devrait être indiqué si vous tapez git status . Regardez cette question : stackoverflow.com/questions/36039687/

1 votes

Vous devez faire git clean -fd s'il y a des annuaires à faire sauter aussi.

46voto

Broken_Mirror Points 151

Exécutez les commandes suivantes

git log

Vous obtiendrez ainsi la clé de hachage de votre dernier push commit.

git reset --hard <your commit hash key>

19voto

General_Twyckenham Points 1586

Si vous avez déjà validé les modifications, vous devez alors annuler les changements .

Si vous ne vous êtes pas encore engagé, faites un checkout propre. git checkout .

9 votes

Soyez prudent avec le retour en arrière. Il est souvent préférable de simplement réinitialiser. Revert crée un nouveau commit qui supprime ou ajoute ce qui était dans un commit précédent. Ces suppressions et "ajouts", cependant, peuvent causer des problèmes lorsque vous tentez plus tard une fusion avec une autre branche, car ils comptent comme des changements. Par exemple, si vous faites accidentellement un changement dans la branche A, que vous réversez le changement puis faites le même changement dans la branche B, le push branche B suivi de la branche A, la branche A peut finir par supprimer les changements que vous avez fait dans la branche B.

0 votes

@JDB Ahh oui merci - j'utilise moi-même reset dans les rares cas où j'en ai eu besoin, j'ai juste confondu avec revert quand j'ai écrit la réponse.

6voto

ScottM Points 181

En plus des réponses ci-dessus, il y a toujours la méthode de la terre brûlée.

rm -R <folder>

dans le shell de Windows la commande est :

rd /s <folder>

Ensuite, vous pouvez simplement vérifier le projet à nouveau :

git clone -v <repository URL> 

Cela supprimera définitivement toutes les modifications locales et tirera la dernière version du référentiel distant. Faites attention avec rm -R car il supprimera vos bonnes données si vous mettez le mauvais chemin. Par exemple, ne sont pas du tout faire :

rm -R /

edit : Pour corriger l'orthographe et ajouter de l'emphase.

-11voto

Ron Royston Points 5179

Pour repousser l'ancien repo. git push -u origin master --force

Je pense que le --force fonctionnerait aussi pour une traction.

3 votes

C'est exactement le contraire de ce que le PO veut faire.

0 votes

"Je pense que la --force fonctionnerait aussi pour une traction" ...ça ne marcherait pas ?

1 votes

git pull est un raccourci pour git fetch suivi par git merge FETCH_HEAD . fetch a un --force mais cela n'a pas vraiment de rapport avec l'écrasement des changements dans la branche courante. Donc, bien que techniquement git pull --force est légal, il ne fait pas ce que vous pensez qu'il fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X