184 votes

git rejette tous les changements et tire depuis upstream

Comment récupérer le dépôt en amont et le faire remplacer le dépôt principal ? Je n'ai qu'une seule branche sur mon repo, qui est master, et j'ai complètement foiré, donc j'ai essentiellement besoin de recommencer à partir de l'amont. Je pense que init fera l'affaire, mais y a-t-il un moyen plus simple ?

313voto

Eric Walker Points 2494

Il y a (au moins) deux choses que vous pouvez faire ici - vous pouvez reclasser le dépôt distant, ou vous pouvez reset --hard à l'ancêtre commun et ensuite faire un pull, ce qui permettra d'avancer rapidement vers le dernier commit sur le master distant.

Pour être concret, voici une extension simple de la réponse originale de Nevik Rehnel :

git reset --hard origin/master
git pull origin master

NOTE : en utilisant git reset --hard supprimera tous les changements non validés, et il peut être facile de s'embrouiller avec cette commande si vous êtes nouveau dans git, donc assurez-vous d'avoir une idée de ce qu'elle va faire avant de continuer.

25voto

Nevik Rehnel Points 5446

Tout en étant sur la branche master : git reset --hard origin/master

puis faire un peu de nettoyage avec git gc (plus d'informations à ce sujet dans les pages du manuel)

Mise à jour : Vous devrez probablement aussi faire un git fetch origin (o git fetch origin master si vous sólo veulent cette branche) ; cela ne devrait pas avoir d'importance si vous faites cela avant ou après la réinitialisation. (Merci @eric-walker)

22voto

Luke Points 82

Vous pouvez le faire en une seule commande :

git fetch --all && git reset --hard origin/master

Notes :

1 AVERTISSEMENT vous perdrez TOUTES vos modifications locales

2 si vous voulez une branche différente de master que vous devez utiliser :

git fetch --all && git reset --hard origin/[BRANCH]

3 vous pouvez le diviser en une paire de commandes :

git fetch --all
git reset --hard origin/master

11voto

BitFreak Points 188

J'ai finalement réalisé maintenant qu'au lieu de

git fetch --all && git reset --hard origin/master

il devrait l'être

git fetch --all && git reset --hard origin/<branch_name>

à la place (si on travaille sur une autre branche)

7voto

purpletech Points 349
git reset <hash>  # you need to know the last good hash, so you can remove all your local commits

git fetch upstream
git checkout master
git merge upstream/master
git push origin master -f

voila, maintenant votre fourche est de nouveau identique à l'amont.

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