Question Comment effacer mon répertoire de travail local dans git? [dupliquer]


Cette question a déjà une réponse ici:

Comment puis-je effacer mon répertoire de travail dans git?


605
2018-03-23 13:43


origine


Réponses:


Pour réinitialiser un fichier spécifique à l'état de dernier engagement (pour annuler les modifications non validées dans un fichier spécifique):

git checkout thefiletoreset.txt

Ceci est mentionné dans le git status sortie:

(use "git checkout -- <file>..." to discard changes in working directory)

Pour réinitialiser l'intégralité du référentiel au dernier état validé:

git reset --hard

Pour supprimer les fichiers non suivis, je supprime généralement tous les fichiers de la copie de travail (mais ne pas la .git/ dossier!), alors faites git reset --hard ce qui laisse avec seulement des fichiers engagés.

Une meilleure façon est d'utiliser git clean: (Attention: en utilisant le -x flag comme ci-dessous fera git pour supprimer les fichiers ignorés.)

git clean -d -x -f

supprimera les fichiers non suivis, y compris les répertoires (-d) et les fichiers ignorés par git (-x). Remplace le -f argument avec -n pour effectuer une course à sec ou -i pour le mode interactif et il vous dira ce qui sera supprimé.

Liens pertinents:


923
2018-03-24 00:57



git clean -df

Modifier: Ce n'est pas bien annoncé mais git clean est vraiment pratique. Git Ready a un belle intro à git clean.

Mise à jour: supprimé le x drapeau basé sur la suggestion dans le commentaire ci-dessous


114
2018-03-23 13:45



Toutes les réponses conservent jusqu'ici les engagements locaux. Si vous êtes vraiment sérieux, vous pouvez rejeter tous les commits locaux et toutes les modifications locales en faisant:

git reset --hard origin/branchname

Par exemple:

git reset --hard origin/master

Cela rend votre référentiel local correspondre exactement l'état de l'origine (autre que les fichiers non-suivis).

Si vous l'avez accidentellement fait juste après avoir lu la commande, et non ce qu'elle fait :), utilisez git reflog pour trouver vos anciens commit.


34
2017-12-19 00:24



Vous pouvez créer une validation contenant une copie de travail vide.

C'est une approche non destructive généralement sans danger car elle n'implique pas l'utilisation de mécanismes de réinitialisation par force brute. D'abord, masquer tout le contenu géré avec git checkout empty, alors vous êtes libre de revoir et de supprimer manuellement tout contenu non géré qui reste.

## create and initialize a temporary repo with an empty working copy
(
mkdir ./temp-repo && cd ./temp-repo && git init
touch ./temp-file && git add . && git commit -m "almost empty"
git rm ./temp-file && git commit -m "empty"
git tag empty
)

## fetch the history from the temporary repo
git remote add empty ./temp-repo && git fetch --tags empty && git remote rm empty
gvfs-trash ./temp-repo ## delete the temporary repo

## clear the working copy
git checkout empty

Votre copie de travail devrait maintenant être libre de tout contenu géré. Tout ce qui reste sont des fichiers non gérés et le .git dossier lui-même.

Pour re-remplir votre copie de travail ...

git checkout master ## or whatever branch you will be using

9
2018-01-25 05:23



Pour passer à une autre branche, annulez toutes les modifications non validées (par exemple, résultant de l'étrange gestion des fins de ligne par Git):

git checkout -f <branchname>

J'ai eu une copie de travail avec des centaines de fichiers modifiés (mais vide git diff --ignore-space-at-eol) que je ne pouvais pas me débarrasser de l'une des commandes que je lis ici, et git checkout <branchname> ne fonctionnera pas non plus - à moins que le -f (ou --force) option.


7
2017-10-18 16:02



Pour réinitialiser un fichier spécifique comme l'état git suggère:

git checkout <filename>

Pour réinitialiser un dossier

git checkout <foldername>/*

1
2018-03-21 18:09