W3docs

git rm

Découvrez la commande git rm, ses options, comment l'annuler et la différence entre la commande shell rm et git rm.

La commande git rm supprime un ou plusieurs fichiers d'un dépôt Git. Cette page explique ce que fait git rm, les options qu'elle accepte, en quoi elle diffère du rm du shell, comment annuler une suppression et quelques recettes pratiques.

Ce que fait git rm

git rm supprime les fichiers suivis — les fichiers que Git connaît déjà. Par défaut, il supprime le fichier à la fois du répertoire de travail (les fichiers sur votre disque) et de l'index de staging (l'instantané que Git enregistrera dans le prochain commit), puis met en scène cette suppression pour qu'elle soit incluse dans votre prochain commit.

Quelques points importants à connaître :

  • git rm ne fonctionne que sur les fichiers suivis. Il échoue avec fatal: pathspec '...' did not match any files si vous essayez de supprimer un fichier non suivi — Git ne suivait pas ce fichier, il n'y a donc rien à enregistrer.
  • Il peut supprimer un fichier uniquement de l'index de staging (avec --cached), mais il ne peut pas supprimer un fichier uniquement du répertoire de travail — c'est ce que fait la commande shell rm.
  • Il ne supprime pas les branches, les tags ou les commits. Il n'agit que sur les fichiers.
  • La suppression n'est pas permanente tant que vous n'avez pas effectué un commit. Avant cela, elle est facile à annuler (voir Annuler git rm).

git rm supprime les fichiers du répertoire de travail et de l'index de staging

Un flux de travail typique ressemble à ceci :

git rm notes.txt        # deletes notes.txt and stages the deletion
git commit -m "Remove notes.txt"

Options de la commande git rm

OptionCe qu'elle fait
<file>…Le(s) chemin(s) à supprimer. Accepte les globs de fichiers comme *.txt.
-f, --forceContourne la vérification de sécurité qui compare le fichier dans HEAD avec l'index de staging et le répertoire de travail. Nécessaire lorsque le fichier comporte des modifications non commitées.
-n, --dry-runExécute la commande sans rien supprimer. Elle liste uniquement les fichiers qu'elle aurait supprimés.
-rRécursif. Requis pour supprimer un répertoire ainsi que tout son contenu.
--Sépare les options des noms de fichiers. À utiliser lorsqu'un nom de fichier pourrait être confondu avec une option (par exemple un fichier littéralement nommé -f).
--cachedSupprime le fichier uniquement de l'index de staging. La copie dans le répertoire de travail reste intacte.
--ignore-unmatchQuitte avec le statut 0 même lorsqu'aucun fichier ne correspond. Utile dans les scripts qui ne doivent pas échouer sur un chemin manquant.
-q, --quietSupprime la sortie par fichier que git rm affiche normalement.

Annuler git rm

git rm met à jour l'index de staging et le répertoire de travail, mais la modification n'est pas permanente tant que vous n'avez pas effectué un commit. Jusqu'à ce moment, vous pouvez récupérer le fichier avec des commandes Git ordinaires. Laquelle utiliser dépend du niveau de retour en arrière souhaité.

Avant de committer la suppression

Pour désindexer la suppression tout en conservant le fichier supprimé sur le disque, réinitialisez l'entrée d'index vers HEAD :

git reset HEAD <file>

Pour rétablir le fichier complètement — à la fois dans l'index de staging et dans le répertoire de travail — utilisez la commande moderne git restore :

git restore --staged --worktree <file>

Les équivalents plus anciens git reset HEAD <file> suivi de git checkout -- <file> fonctionnent toujours, mais git restore est la méthode recommandée dans les versions actuelles de Git.

Après avoir commité la suppression

Si vous avez déjà créé un commit qui enregistre la suppression, le fichier n'existe plus que dans l'historique. Trouvez un point sûr avec git reflog et restaurez le fichier à partir d'un commit où il existait encore :

git restore --source=HEAD~1 <file>

Git rm vs rm

Le rm du shell et git rm suppriment tous deux des fichiers du disque, mais Git les traite de manière très différente.

Lorsque vous exécutez le simple rm du shell sur un fichier suivi, le dépôt Git remarque que le fichier a disparu et affiche la suppression comme une modification non indexée. Vous devez encore exécuter git add (ou git add -u) pour l'enregistrer dans l'index de staging avant de committer.

git rm effectue les deux étapes en une seule fois : il supprime le fichier et met en scène la suppression, de sorte qu'elle est prête pour le prochain commit immédiatement.

# Shell rm — deletion is unstaged, needs git add afterwards
rm notes.txt
git add notes.txt

# git rm — deletion is staged in one step
git rm notes.txt

Supprimer des fichiers uniquement de l'index

Un cas courant consiste à conserver un fichier sur le disque tout en empêchant Git de le suivre — par exemple un fichier de configuration ou un artefact de build que vous avez accidentellement commité et souhaitez maintenant ignorer. Utilisez --cached :

git rm --cached secrets.env

Le fichier reste dans votre répertoire de travail ; seule la copie suivie est supprimée. Ajoutez le chemin à .gitignore ensuite pour qu'il ne soit pas ajouté à nouveau.

Exemples

Supprimer tous les fichiers .txt dans un dossier (joker) :

git rm folder/\*.txt

Le backslash avant * empêche votre shell d'étendre le glob, de sorte que Git lui-même l'étend sur les fichiers suivis sous folder/. Cela correspond également aux chemins dans les sous-répertoires, pas seulement aux enfants directs.

Forcer la suppression de fichiers comportant des modifications non commitées :

git rm -f git-*.sh

Sans -f, git rm refuse de supprimer un fichier dont le contenu dans le répertoire de travail ou en staging diffère de HEAD, pour vous protéger contre la perte de travail. Le flag force contourne cette vérification.

Prévisualiser une suppression sans rien supprimer :

git rm -r --dry-run logs/

Cela liste les fichiers qui seraient supprimés sous logs/, vous permettant de confirmer l'ensemble avant d'exécuter la commande pour de vrai.

Supprimer des fichiers déjà supprimés avec le rm du shell

Si vous avez supprimé plusieurs fichiers suivis avec le rm du shell et souhaitez les enregistrer tous dans votre prochain commit, indexez toutes les suppressions en une seule fois :

git add -u
git commit -m "Remove obsolete files"

git add -u indexe les mises à jour des fichiers déjà suivis, y compris les suppressions. Alternativement, construisez une liste des chemins supprimés et redirigez-la vers git rm --cached :

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

--diff-filter=D sélectionne uniquement les chemins supprimés, et la paire -z / -0 utilise des séparateurs NUL pour que les noms de fichiers contenant des espaces soient gérés correctement.

Pratique

Pratique
Quelles sont les fonctions et options de la commande 'git rm' ?
Quelles sont les fonctions et options de la commande 'git rm' ?
Was this page helpful?