Git supprimer les modifications non validées

Stewart Nguyen 30 janvier 2023
  1. Utilisez git checkout pour supprimer les modifications non validées dans Git
  2. Utilisez git reset pour supprimer les modifications non validées dans Git
  3. Utilisez git stash et git stash pour supprimer les modifications non validées dans Git
Git supprimer les modifications non validées

Cet article vous expliquera comment annuler les modifications non validées que nous avons apportées au référentiel local.

Lorsque vous travaillez avec une fonctionnalité, nous pouvons d’abord créer de nouveaux fichiers, ajouter des modifications aux fichiers existants, puis supprimer certains fichiers. Finalement, nous réalisons que tout est faux et que nous devons revenir au commit précédent. Que devrions nous faire?

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Nous avons plusieurs façons d’y parvenir.

Utilisez git checkout pour supprimer les modifications non validées dans Git

Cette commande annulera les modifications non validées pour les fichiers suivis. Les fichiers suivis sont des fichiers que git connaît, généralement après avoir été ajoutés par git add

$ git checkout .
Updated 2 paths from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Veuillez noter que git checkout ne fonctionnera pas si des fichiers ont déjà été ajoutés à la zone de staging via git add.

$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ git checkout file.txt
Updated 0 paths from the index
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Dans l’exemple ci-dessus, les modifications apportées à file.txt ne sont pas annulées car ce fichier se trouve dans la zone de staging.

Utilisez git reset pour supprimer les modifications non validées dans Git

Pour supprimer les modifications non validées dans la zone de staging, nous devons suivre les étapes suivantes.

  1. Désinstaller le fichier de la zone de staging avec git reset.
  2. Annuler les modifications à l’aide de git checkout.
$ git reset file.txt
Unstaged changes after reset:
M	file.txt
$ git checkout file.txt
Updated 1 path from the index
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)

Une autre façon de supprimer les modifications non validées à l’aide de git reset consiste à utiliser l’option --hard et les paramètres HEAD.

$ git reset --hard HEAD
HEAD is now at 1e087f5 Make some change to file.txt
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

nothing added to commit but untracked files present (use "git add" to track)
  • L’option --hard spécifie à Git de lancer TOUS les changements entre l’état actuel et le commit dans le dernier argument. Pour cette raison, cette commande est considérée comme dangereuse et doit être utilisée après avoir exécuté git status pour vérifier les fichiers de travail.
  • Alias ​​HEAD pour le dernier commit.

Utilisez git stash et git stash pour supprimer les modifications non validées dans Git

L’inconvénient de git checkout et git reset est qu’ils ne pouvaient pas supprimer les fichiers non suivis. feature.txt persiste après l’exécution de ces commandes.

Prenons le premier exemple.

$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   file.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	deleted:    deprecated_feature.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	feature.txt

Pour supprimer toutes les modifications non validées, y compris les fichiers préparés, les fichiers suivis mais non préparés et les fichiers non suivis. Nous allons utiliser proprement l’approche git stash.

git stash nous permet d’enregistrer les modifications mais ne nécessite pas de git commit ; il agit comme un stockage temporaire pour les fichiers non validés.

Après avoir ajouté des modifications au stockage temporaire, nous dirons à Git de supprimer celles qui sont stockées. Par conséquent, toutes les modifications non validées auront disparu.

$ git add .
$ git stash
Saved working directory and index state WIP on main: 16b9767 deprecated_feature.txt
$ git stash drop
Dropped refs/stash@{0} (aebeb2cbdcec917331f5793ef1238f5a525d29ec)
$ git status
On branch main
nothing to commit, working tree clean

En résumé, nous avons plusieurs approches pour supprimer les modifications non validées :

  1. git checkout n’est utile que lorsque les fichiers ne sont pas dans la zone de staging.
  2. git reset utile pour les modifications qui se trouvent dans la zone de préparation mais ne peut pas supprimer les modifications sur les fichiers non suivis, nécessite une combinaison avec git checkout.
  3. git reset --hard HEAD peut être plus court que ce qui précède mais est potentiellement dangereux.
  4. git stash avec git add . peut tout supprimer, y compris les fichiers non suivis.

Article connexe - Git Commit