Question git: annule toutes les modifications du répertoire de travail, y compris les nouveaux fichiers


Comment supprimer toutes les modifications du répertoire de travail, y compris les nouveaux fichiers non suivis. je le sais git checkout -f fait cela, mais il ne supprime pas les nouveaux fichiers non suivis créés depuis la dernière validation.

Est-ce que quelqu'un a une idée de comment faire cela?


931
2017-07-07 04:07


origine


Réponses:


git reset --hard # removes staged and working directory changes

## !! be very careful with these !!
## you may end up deleting what you don't want to
## read comments and manual.
git clean -f -d # remove untracked
git clean -f -x -d # CAUTION: as above but removes ignored files like config.
git clean -fxd :/ # CAUTION: as above, but cleans untracked and ignored files through the entire repo (without :/, the operation affects only the current directory)

1398
2017-07-07 04:09



La méthode la plus sûre, que j'utilise fréquemment:

git clean -fd

223
2018-04-18 16:15



Pour tous non organisé les fichiers utilisent:

git checkout -- .

le . à la fin est important.

Vous pouvez remplacer . avec un nom de sous-répertoire pour effacer seulement un sous-répertoire spécifique de votre projet. Le problème est adressé spécifiquement ici.


161
2017-09-26 15:29



Jetez un oeil à la git clean commander.

git-clean - Supprime les fichiers non suivis de l'arbre de travail

Nettoie l'arborescence de travail en supprimant récursivement les fichiers qui ne sont pas sous contrôle de version, en commençant par le répertoire en cours.

Normalement, seuls les fichiers inconnus à git sont supprimés, mais si l'option -x est spécifiée, les fichiers ignorés sont également supprimés. Cela peut, par exemple, être utile pour supprimer tous les produits de construction.


57
2017-07-07 04:09



Les travaux suivants:

git add -A .
git stash
git stash drop stash@{0}

Notez que cela annulera vos modifications locales non mises en scène et mises en scène. Donc, vous devriez commettre tout ce que vous voulez conserver, avant d'exécuter ces commandes.

Un cas d'utilisation typique: Vous avez déplacé beaucoup de fichiers ou de répertoires, puis vous voulez revenir à l'état d'origine.

Crédits: https://stackoverflow.com/a/52719/246724


36
2017-12-16 11:32



Vous pouvez le faire en deux étapes:

  1. Rétablir les fichiers modifiés: git checkout -f
  2. Supprimer les fichiers non suivis: git clean -fd

26
2017-12-14 15:14



Je croyais que c'était (avertissement: suivant volonté effacer tout)

$ git reset --hard HEAD
$ git clean -fd

le reset annuler les changements. le clean pour supprimer tout non-suivi Files et iriseries.


23
2017-12-15 20:36



git reset --hard origin/{branchName}

Il va supprimer tous les fichiers non suivis.


6
2018-05-17 15:20



Une solution alternative consiste à valider les modifications, puis à se débarrasser de ces validations. Cela n'a pas d'avantage immédiat au début, mais cela ouvre la possibilité de commettre en morceaux, et de créer une balise git pour la sauvegarde.

Vous pouvez le faire sur la branche actuelle, comme ceci:

git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git revert HEAD
git reset HEAD^^

Ou vous pouvez le faire sur une tête détachée. (en supposant que vous démarrez sur la branche BRANCHNAME):

git checkout --detach HEAD
git add (-A) .
git commit -m"DISCARD: Temporary local changes"
git tag archive/local-changes-2015-08-01  # optional
git checkout BRANCHNAME

Cependant, ce que je fais habituellement est de commettre en morceaux, puis nomme tout ou partie des commits comme "DISCARD: ...". Ensuite, utilisez le rebasage interactif pour supprimer les mauvais commits et garder les bons.

git add -p  # Add changes in chunks.
git commit -m"DISCARD: Some temporary changes for debugging"
git add -p  # Add more stuff.
git commit -m"Docblock improvements"
git tag archive/local-changes-2015-08-01
git rebase -i (commit id)  # rebase on the commit id before the changes.
  # Remove the commits that say "DISCARD".

C'est plus bavard, mais cela permet de voir exactement quels changements vous voulez supprimer.

le git lol et git lola Les raccourcis ont été très utiles avec ce flux de travail.


2
2017-08-01 20:12



git clean -i va d'abord vous montrer les éléments à supprimer et continuer après votre confirmation. Je trouve cela utile quand il s'agit de fichiers importants qui ne devraient pas être supprimés accidentellement.

Voir git help clean pour plus d'informations, y compris d'autres options utiles.


2
2017-10-05 10:18



Si vous souhaitez annuler toutes les modifications, vous pouvez utiliser l'une des options valides dans un alias .gitconfig. Par exemple:

[alias]
    discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"

Usage: git discard


2
2017-10-25 20:04