Réinitialiser toutes les modifications après le dernier commit dans git

324

Comment puis-je annuler toutes les modifications apportées à mon répertoire après le dernier commit, y compris la suppression des fichiers ajoutés, la réinitialisation des fichiers modifiés et l'ajout de fichiers supprimés?

Dogbert
la source
doublon possible de Revert au précédent commit Git
nawfal
8
@nawfal peut être un doublon, mais "réinitialiser toutes les modifications après le dernier commit" correspond à plus de critères de recherche (mots recherchés dans google) que correspondant à "comment rétablir le référentiel git". Au moins pour les gens comme moi qui n'ont pas l'anglais comme langue maternelle: d
Shirish Herwade

Réponses:

561

Réinitialisez d'abord les modifications

git reset HEAD --hard

puis nettoyez tout ce qui n'est pas suivi. Si vous souhaitez conserver les fichiers qui ne sont pas suivis en raison de .gitignore, soyez prudent avec cette commande.

git clean -fd
Benjamin Bannier
la source
7
@Adam: Vous pouvez parfois souhaiter l' -xoption git cleanaussi, ce qui lui demande de supprimer également les fichiers ignorés.
Cascabel
31
Si vous souhaitez conserver les fichiers qui ne sont pas suivis en raison de .gitignore, soyez prudent avec la git clean -fdcommande.
bitsoflogic
3
@Levinaris: C'est l'inverse git clean -fdqui ne supprimera pas les fichiers ignorés. -xvolonté.
Robert Siemer
5
@RobertSiemer En fait, c'est possible! Si vous avez des dossiers composés entièrement de fichiers ignorés, ils seront supprimés, supprimant ainsi les fichiers ignorés. Considérez un fichier .gitignore comme celui ici: stackoverflow.com/q/25554504/456645 . Dans cet exemple, supposons que certains dossiers ne contiennent aucun fichier PHP. git clean -fdsupprimera ces dossiers et fichiers non suivis. Testé avec git version 1.9.1
bitsoflogic
3
mais pourquoi le deuxième «nettoyage» était-il nécessaire?
Shirish Herwade
71

Comment puis-je annuler toutes les modifications apportées à mon répertoire après le dernier commit, y compris la suppression des fichiers ajoutés, la réinitialisation des fichiers modifiés et l'ajout de fichiers supprimés?

  1. Vous pouvez annuler les modifications apportées aux fichiers suivis avec:

    git reset HEAD --hard
    
  2. Vous pouvez supprimer des fichiers non suivis avec:

    git clean -f
    
  3. Vous pouvez supprimer les fichiers et répertoires non suivis avec:

    git clean -fd
    

    mais vous ne pouvez pas annuler la modification des fichiers non suivis .

  4. Vous pouvez supprimer les fichiers et répertoires ignorés et non suivis

    git clean -fdx
    

    mais vous ne pouvez pas annuler la modification des fichiers ignorés .

Vous pouvez également définir clean.requireForceà false:

git config --global --add clean.requireForce false

pour éviter d'utiliser -f( --force) lorsque vous utilisez git clean.

Ortomala Lokni
la source
2
Génial, juste ce dont j'avais besoin. Merci pour la comparaison de toutes les commandes pertinentes!
Marquee
-1

Il y a deux commandes qui fonctionneront dans cette situation,

root> git reset --hard HEAD ~ 1

root> git push -f

Pour plus de commandes git, reportez-vous à cette page

RKS
la source
1
git push -fn'est pas lié à la question et, dans ce scénario, est dangereux
moustache1up