Comment supprimer toutes les modifications du répertoire de travail, y compris les nouveaux fichiers non suivis. Je sais que git checkout -f
le fait, mais il ne supprime pas les nouveaux fichiers non suivis créés depuis le dernier commit.
Est-ce que quelqu'un a une idée de comment faire ça?
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)
Pour voir ce qui sera supprimé au préalable, sans le supprimer réellement, utilisez l'indicateur -n
(il s'agit essentiellement d'un test). Lorsque vous êtes prêt à supprimer réellement, supprimez l'indicateur -n
:
git clean -nfd
Méthode la plus sûre, que j'utilise fréquemment:
git clean -fd
Explication de la syntaxe selon /docs/git-clean
page:
-f
(alias: --force
). Si la variable de configuration Git clean.requireForce n'est pas définie sur false, git clean refusera de supprimer des fichiers ou des répertoires à moins que -f, -n ou -i ne soit indiqué. Git refusera de supprimer les répertoires contenant le sous-répertoire ou le fichier .git à moins qu'un second -f ne soit fourni.-d
. Supprimez les répertoires non suivis en plus des fichiers non suivis. Si un répertoire non suivi est géré par un autre référentiel Git, il n'est pas supprimé par défaut. Utilisez l'option -f à deux reprises si vous souhaitez vraiment supprimer un tel répertoire.Comme mentionné dans les commentaires, il serait peut-être préférable de faire un git clean -nd
qui effectue un essai et vous indique ce qui serait supprimé avant de le supprimer.
Lien vers la page git clean
doc: https://git-scm.com/docs/git-clean
Pour tous fichiers non staged , utilisez:
git checkout -- .
Le .
à la fin est important.
Vous pouvez remplacer .
par un nom de sous-répertoire pour effacer uniquement un sous-répertoire spécifique de votre projet. Le problème est traité spécifiquement ici .
Examinez la commande git clean
.
git-clean - Supprime les fichiers non suivis de l'arbre de travail
Nettoie l’arbre de travail en supprimant de manière récursive les fichiers qui ne sont pas sous contrôle de version, à partir du répertoire en cours.
Normalement, seuls les fichiers inconnus de 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.
Les oeuvres suivantes:
git add -A .
git stash
git stash drop stash@{0}
Veuillez noter que cela annulera vos modifications locales non mises en scène et par étapes. 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.
Vous pouvez le faire en deux étapes:
git checkout -f
git clean -fd
Je pensais que c'était ( warning: après will tout effacer )
$ git reset --hard HEAD
$ git clean -fd
La reset
pour annuler les modifications. La clean
supprime tous les f iles et d − répertoires non suivis.
git reset --hard Origin/{branchName}
Il supprimera tous les fichiers non suivis.
git clean -i
vous montrera d'abord les éléments à supprimer et procédera après votre confirmation. Je trouve cela utile lorsqu'il s'agit de fichiers importants qui ne doivent pas être supprimés accidentellement.
Voir git help clean
pour plus d'informations, y compris d'autres options utiles.
Une autre solution consiste à valider les modifications, puis à se débarrasser de ces commits. Cela n’a pas un avantage immédiat au début, mais cela ouvre la possibilité de commettre par 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 HEAD détaché. (en supposant que vous démarriez 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, c’est de commettre des morceaux, puis de nommer certains ou tous les commits comme suit: "DISCARD: ...". Utilisez ensuite la base interactive pour supprimer les mauvaises commises et conserver les bonnes.
_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".
_
Ceci est plus détaillé, mais cela permet de revoir exactement les modifications que vous souhaitez ignorer.
Les raccourcis git lol
_ ET _git lola
ont été très utiles pour ce flux de travail.
Pour un dossier spécifique que j'ai utilisé:
git checkout -- FolderToClean/*
Si vous souhaitez ignorer toutes les modifications, vous pouvez utiliser l'une des options valides d'un alias dans .gitconfig
. Par exemple:
[alias]
discard = "!f() { git add . && git stash && git stash drop stash@{0}; }; f"
Utilisation: git discard
C'est probablement une réponse noob, mais: J'utilise TortoiseGit pour Windows et il a une fonctionnalité intéressante appelée REVERT. Donc, ce que vous faites pour annuler vos modifications locales non préparées non mises en scène est: