git supprime tous les changements et tire depuis l'amont


145

Comment récupérer le dépôt en amont et le remplacer par master? Je n'ai qu'une seule branche sur mon repo, qui est master, et je l'ai complètement gâchée, donc je dois essentiellement recommencer de l'amont. Je pense qu'init fera le travail, mais y a-t-il un moyen plus simple?

Réponses:


251

Il y a (au moins) deux choses que vous pouvez faire ici: vous pouvez recloner le référentiel distant, ou vous pouvez le reset --hardfaire sur l'ancêtre commun, puis faire un pull, qui avancera rapidement vers le dernier commit sur le maître distant.

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

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

REMARQUE : l'utilisation git reset --hardsupprimera toutes les modifications non validées, et il peut être facile de vous confondre avec cette commande si vous êtes nouveau dans git, alors assurez-vous d'avoir une idée de ce qu'elle va faire avant de continuer.


1
Plus d'aide pour les débutants là-bas: git gcnettoie et exécute un peu de ménage. Sur une autre note, je n'ai jamais couru git gc. C'est agréable à utiliser, mais pas nécessaire.
Joshua Dance

@JoshuaDance - bon point. Je ne sais pas pourquoi je l'ai inclus à l'origine.
Eric Walker

23

sur le maître de succursale: git reset --hard origin/master

puis nettoyez avec git gc(plus à ce sujet dans les pages de manuel)

Mise à jour: Vous devrez probablement également faire un git fetch origin(ou git fetch origin mastersi vous ne voulez que cette branche); peu importe si vous faites cela avant ou après la réinitialisation. (Merci @ eric-walker)


1
Vous devrez peut-être faire une traction après le reset --hard.
Eric Walker

L'extraction de master n'est pas nécessaire une fois que git fetch origin est exécuté avant la réinitialisation.
sciritai

@sciritai: mon commentaire a été ajouté avant la mention de récupération à l'origine.
Eric Walker

19

Vous pouvez le faire en une seule commande:

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

Ou dans une paire de commandes:

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

Notez que vous perdrez TOUS vos changements locaux


5
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 retour comme en amont.


0

J'ai enfin réalisé maintenant qu'au lieu de git fetch --all && git reset --hard origin/master, ça devrait être git fetch --all && git reset --hard origin/<branch_name>, à la place (si on travaille sur une branche différente)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.