196 votes

comment supprimer les fichiers non suivis dans Git ?

Je travaille sur une branche, disons "expérimentale", que je sépare de ma branche principale, puis je génère un modèle d'utilisateur dans la branche expérimentale, mais il n'est pas encore ajouté à l'index.

Que dois-je faire si je veux supprimer toutes les modifications des fichiers récemment ajoutés dans ma branche expérimentale ? Les fichiers non suivis sont listés comme ci-dessous :

$ git status
 On branch new_chick
 Untracked files:
   (use "git add <file>..." to include in what will be committed)

       .project
       app/models/user.rb
       db/migrate/
       test/fixtures/users.yml
       test/unit/user_test.rb

J'ai essayé d'exécuter "git reset --hard" dans l'espoir d'annuler tous ces changements, mais tous les fichiers ci-dessus sont toujours affichés.

Quelqu'un peut-il m'éclairer ?

2 votes

1voto

Jagriti Kumari Points 39

La commande pour votre sauvetage est git clean .

0voto

skb Points 1118

J'ai eu le même problème. J'avais pris le dernier mais il y avait quelques changements dans le local en raison de laquelle la fusion ne se produisait pas à un fichier particulier. Le fichier n'était pas suivi et je ne voulais pas qu'il le soit. Ce que j'ai fait, c'est

$ git checkout filepath/filename

filepath - L'emplacement à partir duquel j'ai fait le git bash. Ensuite, quand j'ai pris le dernier, les changements étaient disponibles.

0voto

ideasman42 Points 1682

Alors que git clean fonctionne bien, je trouve toujours utile d'utiliser mon propre script pour nettoyer le repo git, cela a quelques avantages.

Cette fonction affiche une liste de fichiers à nettoyer, puis demande de manière interactive de nettoyer ou non. C'est presque toujours ce que je veux, car demander interactivement à chaque fichier devient fastidieux.

Il permet également de filtrer manuellement la liste, ce qui s'avère pratique lorsqu'il existe des types de fichiers que vous ne voulez pas nettoyer (et que vous avez des raisons de ne pas engager).


git_clean.sh


#!/bin/bash
readarray -t -d '' FILES < <(
    git ls-files -z --other --directory |
        grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
    echo  "Nothing to clean!"
    exit 0
fi

echo "Dirty files:"
printf '  %s\n' "${FILES[@]}"

DO_REMOVE=0
while true; do
    echo ""
    read -p "Remove ${#FILES[@]} files? [y/n]: " choice
    case "$choice" in
        y|Y )
            DO_REMOVE=1
            break ;;
        n|N )
            echo "Exiting!"
            break ;;
        * ) echo "Invalid input, expected [Y/y/N/n]"
            continue ;;
    esac
done

if [ "$DO_REMOVE" -eq 1 ];then
    echo "Removing!"
    for f in "${FILES[@]}"; do
       rm -rfv "$f"
    done
fi

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