Git supprimer les modifications non validées
-
Utilisez
git checkout
pour supprimer les modifications non validées dans Git -
Utilisez
git reset
pour supprimer les modifications non validées dans Git -
Utilisez
git stash
etgit stash
pour supprimer les modifications non validées dans Git
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.
- Désinstaller le fichier de la zone de staging avec
git reset
. - 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 :
git checkout
n’est utile que lorsque les fichiers ne sont pas dans la zone de staging.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 avecgit checkout
.git reset --hard HEAD
peut être plus court que ce qui précède mais est potentiellement dangereux.git stash
avecgit add .
peut tout supprimer, y compris les fichiers non suivis.
Article connexe - Git Commit
- Afficher l'historique des validations pour une branche à l'aide de Git Log With Range
- Afficher les fichiers dans Git Commit
- Commits multiples à l'aide de Cherry-Pick dans Git
- Copier les commits d'une autre branche dans Git
- Git Afficher les changements dans le commit
- Modifier l'éditeur Git pour les commits