555 votes

Comment démonter un grand nombre de fichiers sans supprimer le contenu

J'ai accidentellement ajouté beaucoup de fichiers temporaires en utilisant git add -A Je réussis à séparer les fichiers à l'aide des commandes suivantes et à supprimer l'index modifié.

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

Les commandes ci-dessus sont listées dans les git help rm . Mais malheureusement, mes fichiers ont également été supprimés lors de l’exécution, bien que j’ai donné l’option de cache. Comment effacer l'index sans perdre le contenu?

De plus, il serait utile que quelqu'un puisse expliquer le fonctionnement de cette opération.

1183voto

Ian Maddox Points 126

Ne lancez pas "git reset --hard". Cela ne fera pas que décomposer vos fichiers ajoutés, mais annulera les modifications que vous avez apportées!

Si tout ce que vous voulez, c'est annuler une course trop zélée "git add":

 git reset
 

Vos changements seront libérés et prêts à être rajoutés à votre guise.

37voto

sehe Points 123151

Si vous avez une vierge repo (ou la TÊTE n'est pas défini)[1] vous pouvez simplement

rm .git/index

Bien sûr, cela va vous obliger à re-ajoutez les fichiers que vous ne voulez ajouter.


[1] Note (comme expliqué dans les commentaires) ce serait généralement se produire uniquement lorsque l'opération est tout nouveau ("vierge") ou pas de livraison n'ait été faite. Plus techniquement, chaque fois qu'il n'y a pas de contrôle ou de travail de l'arbre.

Le Jus en le rendant plus clair :)

18voto

Amber Points 159296

Utiliser git reset HEAD pour réinitialiser l'index sans la suppression de fichiers. (Si vous ne souhaitez réinitialiser un fichier particulier dans l'index, vous pouvez utiliser git reset HEAD -- /path/to/file à le faire.)

La conduite de l'opérateur, dans un shell, prend l' stdout du processus sur la gauche et passe comme stdin pour le processus sur la droite. C'est essentiellement l'équivalent de:

$ proc1 > proc1.out
$ proc2 < proc1.out
$ rm proc1.out

mais c'est plutôt $ proc1 | proc2, le deuxième processus peut commencer à obtenir des données avant le premier est fait de la sortie, et il n'y a pas de fichier réel en cause.

11voto

Bijan Points 1193
git stash && git stash pop

8voto

jjlin Points 2039

Si HEAD n'est pas activé, vous pouvez aussi faire

 git rm -rf --cached .
 

tout défaire. C'est en fait la même chose que la solution de sehe, mais cela évite tout nettoyage avec les composants internes de Git.

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