Pourquoi utiliser 'git rm' pour supprimer un fichier au lieu de 'rm'?

171

Sur SVN, supprimer quelque chose du système de fichiers directement (plutôt que d'utiliser svn) a créé une charge de maux de tête.

Je n'ai pas trouvé que c'était un problème lors de l'utilisation git, mais je remarque que git a sa propre rmimplémentation (git rm ).

Quelle est la différence entre rmet git rm?

cjm2671
la source

Réponses:

253

Si vous utilisez simplement rm, vous devrez faire un suivi avec git add <fileRemoved>. git rmfait cela en une seule étape.

Vous pouvez également utiliser git rm --cachedqui supprimera le fichier de l'index (en le préparant pour suppression lors de la prochaine validation), mais gardez votre copie dans le système de fichiers local.

Andy
la source
Bonne réponse. J'ai pu utiliser git reset --hardpuis faire une vérification de master pour sortir de l'état de tête détaché parce que je savais que je n'avais pas de changements non validés. Si vous n'avez pas validé vos modifications, vous voudrez peut-être faire un git stash, mais je suis relativement nouveau dans git donc je ne connais pas la commande exacte. Si vous êtes venu ici en 2014 ou après, j'espère que cette réponse vous a été utile.
Eric Hepperle - CodeSlayer2010
@Andy - Si j'ai utilisé rm(au lieu de git rm) et supprimé de nombreux fichiers en l'utilisant, et que maintenant je ne veux gitpas les suivre. Existe-t-il un moyen d'annuler les modifications? Je veux gitsuivre mon rmcomme retiré car je ne l'ai pas utilisé git rmen premier lieu.
Chetan Arvind Patil
Ce serait bien si cela était clairement indiqué dans la documentation en ligne (cela peut être là, mais ce n'est évidemment pas évident ou cette question n'aurait pas été posée). Ce serait bien pour les utilisateurs de savoir qu'ils ne font rien de mal s'ils empruntent la voie OS rm. Et il y a des raisons d'emprunter la voie du système d'exploitation. Par exemple, si vous devez supprimer un fichier pour tester que quelque chose fonctionne avant de valider la modification, la route du système d'exploitation est un peu plus sûre que l'utilisation de git rm, car dans le cas de git, vous devez désinstaller l'action, alors que dans l'option OS, vous avez juste aller chercher (je crois).
bob le
12

Suppression de fichiers à l'aide de rm n'est pas un problème en soi, mais si vous souhaitez ensuite confirmer que le fichier a été supprimé, vous devrez tout de même faire un git rm, donc vous pouvez aussi bien le faire dès le départ.

De plus, en fonction de votre shell, git rmaprès avoir supprimé le fichier, vous n'obtiendrez pas de complétion par tabulation, vous devrez donc épeler le chemin vous-même, alors que si vous git rmpendant que le fichier existe encore, la complétion par tabulation fonctionnera normalement.

Hammar
la source
7

git rmsupprimera le fichier de l'index et du répertoire de travail (index uniquement si vous l'avez utilisé --cached) afin que la suppression soit préparée pour la prochaine validation.

manojlds
la source
4

Cependant, si vous finissez par utiliser rm au lieu de git rm. Vous pouvez ignorer l'ajout de git et valider directement les modifications en utilisant:

git commit -a

Combattant
la source
3

Supprimez des fichiers de l'index ou de l'arborescence de travail et de l'index. git rm ne supprimera pas un fichier de votre répertoire de travail uniquement.

Voici comment vous pouvez supprimer un fichier à l'aide de rm -f, puis le supprimer de votre index avecgit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Cependant, vous pouvez faire tout cela en une seule fois avec juste git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html
basicxman
la source
2

Lorsque vous utilisez git rm, la suppression fera partie de votre prochain commit. Donc, si vous voulez pousser le changement, vous devez utiliser git rm

keis
la source
2

En plus de la réponse d'Andy, il existe un utilitaire supplémentaire pour git rm:

  1. Sécurité : Lorsque vous faites à la git rmplace de rm, Git bloquera la suppression en cas de divergence entre la HEADversion d'un fichier et l'index de préparation ou la version de l'arborescence de travail. Ce bloc est un mécanisme de sécurité pour empêcher la suppression des modifications en cours.

  2. La sauvegarde : git rm --dry-run. Cette option est une sauvegarde qui exécutera la git rmcommande mais ne supprimera pas réellement les fichiers. Au lieu de cela, il affichera les fichiers qu'il aurait supprimés.

Joe
la source