428 votes

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

Comment puis-je annuler chaque changement apporté à mon répertoire après le dernier commit, y compris la suppression des fichiers ajoutés, la réinitialisation des fichiers modifiés et le réajout des fichiers supprimés ?

0 votes

Possible duplicate de Revenir au commit Git précédent

8 votes

@nawfal peut être un doublon, mais "réinitialiser tous les changements après le dernier commit" correspond à davantage de critères de recherche (mots recherchés sur Google) que le correspondant "comment revenir en arrière dans le dépôt Git". Du moins pour des personnes comme moi qui n'ont pas l'anglais comme langue maternelle :d

746voto

Benjamin Bannier Points 11953

Tout d'abord, réinitialisez tous les changements

Cela annulera tous les changements que vous avez apportés aux fichiers suivis et restaurera les fichiers supprimés :

git reset HEAD --hard

Deuxièmement, supprimez les nouveaux fichiers

Cela supprimera tous les nouveaux fichiers qui ont été ajoutés depuis le dernier commit :

git clean -fd

Les fichiers qui ne sont pas suivis en raison de .gitignore sont préservés ; ils ne seront pas supprimés

Avertissement : en utilisant -x au lieu de -fd supprimerait les fichiers ignorés. Vous ne voulez probablement pas faire cela.

9 votes

@Adam: Vous pouvez parfois vouloir l'option -x pour git clean également, qui lui indique de supprimer également les fichiers ignorés.

38 votes

Si vous voulez conserver des fichiers qui ne sont pas suivis en raison de .gitignore, faites attention à la commande git clean -fd.

3 votes

@Levinaris: C'est le contraire git clean -fd ne supprimera pas les fichiers ignorés. -x le fera.

104voto

Ortomala Lokni Points 5613

Comment puis-je annuler chaque modification apportée à mon répertoire après le dernier commit, y compris la suppression des fichiers ajoutés, la réinitialisation des fichiers modifiés et le rétablissement des fichiers supprimés ?

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

    git reset HEAD --hard
  2. Vous pouvez supprimer les 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 les modifications apportées aux 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 les modifications apportées aux fichiers ignorés.

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

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

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

3 votes

Génial, exactement ce dont j'avais besoin. Merci pour la comparaison de toutes les commandes pertinentes!

0 votes

git reset HEAD --hard semblait suffisant pour moi pour annuler les modifications apportées au dernier commit.

-9voto

RKS Points 119

Il existe deux commandes qui fonctionneront dans cette situation,

root>git reset --hard HEAD~1

root>git push -f

Pour plus de commandes git, consultez cette page

6 votes

git push -f n'est pas lié à la question et, dans ce scénario, est dangereux

2 votes

Cela supprimera le dernier commit du dépôt distant, au lieu de supprimer tous les changements depuis le dernier commit.

1 votes

Veuillez supprimer cette réponse, elle fait l'opposé de ce que l'OP a demandé, et donc est dangereuse. Supprimer cette réponse permettra également de restaurer votre réputation perdue.

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