Attention: n'utilisez la commande suivante que si vous voulez perdre du travail non engagé!
L'utilisation git reset
a été expliquée, mais vous avez également demandé une explication des commandes canalisées, alors voici:
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
La commande git ls-files
répertorie tous les fichiers connus de git. L'option leur -z
impose un format spécifique, le format attendu par xargs -0
, qui les invoque rm -f
ensuite, ce qui signifie de les supprimer sans vérifier votre approbation.
En d'autres termes, "listez tous les fichiers que git connaît et supprimez votre copie locale".
Ensuite, nous arrivons à git diff
, qui montre les changements entre les différentes versions des éléments que git connaît. Il peut s'agir de changements entre différentes arborescences, de différences entre les copies locales et les copies distantes, etc.
Tel qu'utilisé ici, il montre les changements non programmés; les fichiers que vous avez modifiés mais que vous n'avez pas encore validés. L'option --name-only
signifie que vous voulez uniquement les noms de fichiers (complets) et --diff-filter=D
que vous êtes intéressé par les fichiers supprimés uniquement. (Hé, n'avons-nous pas simplement supprimé un tas de choses?)
Cela est ensuite canalisé dans le fichier que xargs -0
nous avons vu auparavant, qui les invoque git rm --cached
, ce qui signifie qu'elles sont supprimées du cache, tandis que l'arborescence de travail doit être laissée seule - sauf que vous venez de supprimer tous les fichiers de votre arborescence de travail. Maintenant, ils sont également supprimés de votre index.
En d'autres termes, toutes les modifications, échelonnées ou non, ont disparu et votre arborescence de travail est vide. Ayez un cri, extrayez vos fichiers frais d'origine ou à distance et refaites votre travail. Maudissez le sadique qui a écrit ces lignes infernales; Je ne sais absolument pas pourquoi quelqu'un voudrait faire ça.
TL; DR: vous venez de tout arroser; recommencer et utiliser à git reset
partir de maintenant.
rm -f
n'est pas une commande git et n'a pas d'--cached
option. Vos fichiers locaux ont été supprimés avant votre exécution,git rm
donc je ne pense pas que vous puissiez légitimement blâmergit rm
quoi que ce soit.