web-dev-qa-db-fra.com

Comment supprimer les commits locaux dans Git?

J'avais travaillé sur quelque chose et décidé que c'était complètement foutu ... après en avoir commis une partie. J'ai donc essayé la séquence suivante:

git reset --hard
git rebase Origin
git fetch
git pull
git checkout

A quel moment j'ai reçu le message

Your branch is ahead of 'Origin/master' by 2 commits.

Je veux supprimer mes commits locaux, sans avoir à effacer mon répertoire local et tout télécharger à nouveau. Comment puis-je accomplir cela?

231
Daniel C. Sobral
git reset --hard Origin/master

supprimera tous les commits qui ne sont pas dans Origin/masterOrigin est le nom du référentiel et master est le nom de la branche.

514
mipadi

En passant, mis à part la réponse de mipadi (qui devrait fonctionner d'ailleurs), vous devriez savoir que faire:

git branch -D master
git checkout master

fait aussi exactement ce que vous voulez sans having to redownload everything (votre citation paraphrasée). En effet, votre référentiel local contient une copie du référentiel distant (et cette copie n’est pas identique à votre répertoire local, elle n’est même pas identique à votre branche extraite).

Effacer une branche est parfaitement sécurisé et reconstruire cette branche est très rapide et ne nécessite aucun trafic réseau. Rappelez-vous que git est avant tout un repo local par conception. Même les succursales distantes ont une copie sur le local. Il n’ya que quelques métadonnées qui indiquent à git qu’une copie locale spécifique est en réalité une branche distante. Dans git, tous les fichiers sont sur votre disque dur tout le temps.

Si vous n'avez pas d'autres branches que master, vous devriez:

git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
28
slebetman

Ce que je fais est que j'essaye de réinitialiser dur à HEAD. Cela effacera tous les commits locaux:

git reset --hard HEAD^
11
giang nguyen

Vous devez courir

git fetch

Pour obtenir toutes les modifications et vous ne recevrez plus de message avec "votre succursale est en avance".

J'ai vu des cas où la télécommande était désynchronisée et devait être mise à jour. Si un reset --hard ou un branch -D échoue, essayez

git pull Origin
git reset --hard 
0
Jim Clouse

Je devais faire un:

git checkout -b master

comme git a dit qu'il n'existe pas, car il a été essuyé avec le

git -D master
0
ramp