Différentes façons de supprimer les modifications Git locales

Je viens de cloner un repository git et de vérifier une twig. J’ai travaillé dessus, puis j’ai décidé de supprimer tous mes changements locaux, car je voulais la copie originale.

En bref, j’ai dû faire les deux commandes suivantes pour supprimer mes modifications locales

git checkout . git clean -f 

Ma question est,

(1) S’agit-il de l’approche correcte pour se débarrasser des changements locaux ou laissez-moi savoir la bonne approche?

(2) quand utiliser git reset --hard comme je peux réinitialiser même sans cette commande

Merci

* Solution: Édition (s) principale (s): 03/26: * Remplacé plusieurs termes vagues par une terminologie spécifique à git [suivi / non suivi / mis en scène / non mis en scène]

Il ne pourrait y avoir que trois catégories de fichiers lorsque nous apportons des modifications locales:

Type 1. Fichiers suivis par étapes

Type 2. Fichiers suivis non mis en scène

Tapez 3. Fichiers UnTracked non classés, fichiers UnTracked

  • Mise en scène – Ceux qui sont déplacés dans la zone de mise en scène / Ajouté à l’index
  • Suivi des fichiers modifiés
  • Untracked – nouveaux fichiers. Toujours sans mise en scène Si elles sont mises en scène, cela signifie qu’elles sont suivies.

Que fait chaque commande:

  1. git checkout . – Supprime uniquement les fichiers non stockés suivis [Type 2]

  2. git clean -f – Supprime UNIQUEMENT les fichiers Untracked non planifiés [Type 3]

  3. git reset --hard – Supprime UNIQUEMENT les fichiers suivis stockés et non stockés [Type 1, Type 2]

  4. git stash -u – Supprime tous les changements [Type 1, Type 2, Type 3]

Conclusion:

Il est clair que nous pouvons utiliser soit

 (1) combination of `git clean -f` and `git reset --hard` 

OU

 (2) `git stash -u` 

pour atteindre le résultat souhaité.

Note: Stashing, car le mot signifie ‘Stockez (quelque chose) en toute sécurité et en secret dans un endroit spécifié.’ Cela peut toujours être récupéré en utilisant la git stash pop . Donc, choisir entre les deux options ci-dessus est l’appel du développeur.

Merci Christoph et Frederik Schøning.

Edit: 03/27

Je pensais que ça valait la peine de mettre la note ‘ beware ‘ à git clean -f

git clean -f

il n’y a pas de retour en arrière. Utilisez -n ou --dry-run pour prévisualiser les dégâts que vous --dry-run .

Si vous voulez également supprimer des répertoires, lancez git clean -f -d

Si vous voulez juste supprimer les fichiers ignorés, lancez git clean -f -X

Si vous souhaitez supprimer les fichiers ignorés ainsi que les fichiers non ignorés, lancez git clean -f -x

reference: plus sur git clean : Comment supprimer des fichiers locaux (non suivis) de l’arborescence de travail Git actuelle?

Edit: 20/05/15

Rejeter tous les commits locaux sur cette twig [Suppression des commits locaux]

Afin de supprimer tous les commits locaux sur cette twig, pour que la twig locale soit identique au “amont” de cette twig, lancez simplement git reset --hard @{u}

Référence: http://sethrobertson.github.io/GitFixUm/fixup.html

ou bien git reset --hard origin/master [si la twig locale est master ]

Note: 12/06/2015 Ce n’est pas une copie de l’autre question SO qui est marquée comme duplicata. Cette question porte sur la façon de supprimer les modifications GIT locales [supprimer un fichier ajouté, supprimer les modifications apscopes au fichier existant, etc. et les différentes approches; Où dans l’autre thread SO ne traite que comment supprimer les validations locales. Si vous avez ajouté un fichier et que vous souhaitez le supprimer seul, l’autre thread SO n’en discute pas. Ce n’est donc pas un duplicata de l’autre]

Edit: 23/06/15

Comment rétablir un commit déjà poussé dans un référentiel distant?

 $ git revert ab12cd15 

Edit: 09/01/2015

Supprimer une validation précédente de la twig locale et de la twig distante

Case: Vous venez de commettre un changement dans votre agence locale et a immédiatement poussé vers la succursale distante, soudainement réalisé, oh non! Je n’ai pas besoin de ce changement. Maintenant fais quoi?

git reset --hard HEAD~1 [pour effacer la validation de la twig locale]

git push origin HEAD --force [les deux commandes doivent être exécutées. Pour supprimer de la twig distante]

Quelle est la twig? C’est la twig actuellement vérifiée.

Edit 09/08/2015 – Supprimer la fusion locale de git:

Je suis sur la twig principale et la twig master fusionnée avec une phase2 twig nouvellement active

 $ git status # On branch master $ git merge phase2 $ git status # On branch master # Your branch is ahead of 'origin/master' by 8 commits. 

Q: Comment se débarrasser de cette fusion? git reset --hard essayé git reset --hard et git clean -d -f Les deux ne fonctionnaient pas.

Les seules choses qui ont fonctionné sont les suivantes:

 $ git reset --hard origin/master 

ou

 $ git reset --hard HEAD~8 

ou

$ git reset --hard 9a88396f51e2a068bb7 [sha commettre du code – c’est celui qui était présent avant que tous vos commits de fusion se soient produits]

Tout dépend exactement de ce que vous essayez d’annuler / de rétablir. Commencez par lire le post sur le lien d’Ube . Mais pour tenter une réponse:

Réinitialisation matérielle

 git reset --hard [HEAD] 

Supprimez complètement tous les changements par étapes et non modifiés des fichiers suivis.

Je me retrouve souvent à utiliser la réinitialisation matérielle, quand je suis comme “tout simplement défaire comme si j’avais fait un re-clone complet à partir de la télécommande”. Dans votre cas, où vous voulez simplement que votre repo soit parfait, cela fonctionnerait.

Nettoyer

 git clean [-f] 

Supprimez les fichiers qui ne sont pas suivis.

Pour supprimer des fichiers temporaires, mais conservez les modifications par étapes ou non sur des fichiers déjà suivis. La plupart du temps, je finirais probablement par faire une règle ignore au lieu de nettoyer à plusieurs resockets – par exemple pour les dossiers bin / obj dans un projet C #, que vous voudriez généralement exclure de votre repository pour économiser de l’espace ou quelque chose du genre.

L’option -f (force) supprime également les fichiers qui ne sont pas suivis et sont également ignorés par git mais ignore-rule. Dans le cas ci-dessus, avec une règle ignore pour ne jamais suivre les dossiers bin / obj, même si ces dossiers sont ignorés par git, l’utilisation de l’option force les supprimera de votre système de fichiers. J’ai sporadiquement vu une utilisation pour cela, par exemple lors du déploiement de scripts, et vous souhaitez nettoyer votre code avant de déployer, de compresser ou autre.

Git clean ne touchera pas les fichiers qui sont déjà suivis.

Commander “point”

 git checkout . 

Je n’avais en fait jamais vu cette notation avant de lire votre post. J’ai du mal à trouver de la documentation pour cela (peut-être que quelqu’un peut aider), mais en jouant un peu, il semble que cela signifie:

“Annuler toutes les modifications dans mon arbre de travail”.

C’est-à-dire annuler les modifications non mises en œuvre dans les fichiers suivis. Il ne semble pas toucher les modifications par étapes et laisse les fichiers non suivis seuls.

Se cacher

Certaines réponses mentionnent le stockage. Comme l’indique le libellé, vous utiliseriez probablement un cache lorsque vous êtes au milieu de quelque chose (pas prêt pour un commit), et que vous devez changer de twig temporairement ou travailler sur un autre état de votre code, pour revenir ensuite à votre “désordre”. bureau”. Je ne vois pas cela s’applique à votre question, mais c’est très pratique.

Pour résumer

En règle générale, si vous êtes sûr d’avoir commis et peut-être git reset --hard HEAD des modifications importantes à distance, si vous ne faites que jouer, utilisez git reset --hard HEAD suivi de git clean -f définitivement votre code à l’état, il serait dans, s’il venait d’être cloné et extrait d’une twig. Il est très important de souligner que la réinitialisation supprimera également les modifications par étapes, mais non validées. Cela effacera tout ce qui n’a pas été commis (sauf les fichiers non suivis, auquel cas, utilisez clean ).

Toutes les autres commandes sont là pour faciliter les scénarios plus complexes, où une granularité de “défaire des trucs” est nécessaire 🙂

Je pense que votre question n ° 1 est couverte, mais enfin, pour conclure sur # 2: la raison pour laquelle vous n’avez jamais trouvé le besoin d’utiliser git reset --hard c’est que vous n’avez jamais rien mis en scène. Si vous aviez mis en place un changement, pas de git checkout . ni git clean -f aurait inversé.

J’espère que cela couvre.

Comme avec tout ce qui se passe dans git, il y a plusieurs façons de le faire. Les deux commandes que vous avez utilisées sont une façon de le faire. Une autre chose que vous auriez pu faire est de simplement les ranger avec git stash -u . Le -u s’assure que les nouveaux fichiers ajoutés (non suivis) sont également inclus.

La chose pratique à propos de git stash -u est que

  1. c’est probablement la commande la plus simple (seulement?) pour atteindre votre objective
  2. si vous changez d’avis après coup, vous récupérez tout votre travail avec git stash pop (c’est comme supprimer un email dans gmail où vous pouvez simplement annuler si vous changez d’avis après coup)

A partir de votre autre question, git reset --hard ne supprimera pas les fichiers non suivis, vous aurez donc toujours besoin de git clean -f . Mais un git stash -u pourrait être le plus pratique.

Raison de l’ajout d’une réponse en ce moment:

Jusqu’à présent, j’ajoutais la conclusion et les «réponses» à ma question initiale, ce qui rendait la question très longue, et partait donc pour une réponse séparée.

J’ai également ajouté des commandes git plus fréquemment utilisées qui m’aident sur Git, pour aider quelqu’un d’autre.

La première étape avant de vous engager est de configurer votre nom d’utilisateur et votre e-mail qui apparaissent avec votre commit.

# Définit le nom que vous souhaitez attacher à vos transactions de validation

 $ git config --global user.name "[name]" 

# Définit le courrier électronique que vous souhaitez joindre à vos transactions de validation

 $ git config --global user.email "[email address]" 

#Liste la configuration globale

 $ git config --list 

#check statut

 git status 

#Liste toutes les twigs locales et distantes

 git branch -a 

# créer une nouvelle twig locale et commencer à travailler sur cette twig

 git checkout -b "branchname" 

ou, cela peut être fait en deux étapes

créer une twig: git branch branchname fonctionne sur cette twig: git checkout branchname

#commit changements locaux [processus en deux étapes: – Ajouter le fichier à l’index, cela signifie append à la zone de transfert . Puis validez les fichiers présents dans cette zone de transit.]

 git add  git commit -m "commit message" 

#checkout une autre twig locale

 git checkout "local branch name" 

# Supprimez tous les changements dans la twig locale [Supposons que vous ayez effectué des modifications dans une twig locale, comme append un nouveau fichier ou modifier un fichier existant, ou effectuer une validation locale, mais que ce n’est plus nécessaire] git clean -d -f et git reset --hard nettoie toutes les modifications locales apscopes à la twig locale, sauf si une validation locale est effectuée]

git stash -u supprime également tous les changements

Note: Il est clair que nous pouvons utiliser une combinaison de (1) git clean –d –f et git reset --hard OU (2) git stash -u pour obtenir le résultat souhaité.

Note 1: Stashing, car le mot signifie «Stockez (quelque chose) en toute sécurité et en secret dans un endroit spécifié». Cela peut toujours être récupéré en utilisant git stash pop. Donc, choisir entre les deux options ci-dessus est l’appel du développeur.

Note 2: git reset --hard supprimera les modifications du répertoire de travail. Veillez à conserver les modifications locales à conserver avant d’exécuter cette commande.

# Basculez vers la twig principale et assurez-vous que vous êtes à jour.

 git checkout master 

git fetch [cela peut être nécessaire (selon votre configuration git) pour recevoir des mises à jour sur l’origine / le maître]

 git pull 

# Fusionner la twig d’entités dans la twig principale.

 git merge feature_branch 

# Réinitialise la twig principale à l’état d’origine.

 git reset origin/master 

#Accidentellement supprimé un fichier de local, comment le récupérer? Faire un git status pour obtenir le chemin de fichier complet de la ressource supprimée

 git checkout branchname  

c’est tout!

#Merge twig principale avec someotherbranch

 git checkout master git merge someotherbranchname 

#rename twig locale

 git branch -m old-branch-name new-branch-name 

# supprimer la succursale locale

 git branch -D branch-name 

#delete twig distante

 git push origin --delete branchname 

ou

 git push origin :branch-name 

#revertir un commit déjà envoyé dans un repository distant

 git revert hgytyz4567 

#branch d’un commit précédent en utilisant GIT

 git branch branchname  

#Change message de validation de la validation la plus récente qui a déjà été envoyée à distance

 git commit --amend -m "new commit message" git push --force origin  

# Supprimer tous les commits locaux sur cette twig [Suppression des commits locaux]

Afin de supprimer tous les commits locaux sur cette twig, pour rendre la twig locale identique au “amont” de cette twig, exécutez simplement

 git reset --hard @{u} 

Référence: http://sethrobertson.github.io/GitFixUm/fixup.html ou do git reset --hard origin/master [si la twig locale est maître]

# Rétablir un commit déjà envoyé dans un référentiel distant?

 $ git revert ab12cd15 

# Supprime un commit précédent de la twig locale et de la twig distante

Cas d’utilisation: Vous venez de commettre un changement sur votre twig locale et vous avez immédiatement poussé vers la twig distante, tout à coup, Oh non! Je n’ai pas besoin de ce changement. Maintenant fais quoi?

git reset --hard HEAD~1 [pour la suppression de la validation de la twig locale. 1 désigne celui que vous vous êtes engagé]

git push origin HEAD --force [les deux commandes doivent être exécutées. Pour supprimer de la twig distante]. La twig actuellement extraite sera appelée la twig où vous effectuez cette opération.

# Supprimez certains des commits récents des référentiels locaux et distants et conservez-les dans la validation souhaitée. (une sorte de reprise commise depuis local et distant)

Supposons que vous avez 3 commits que vous avez poussés vers la twig distante nommée ‘ develop ‘ ‘

 commitid-1 done at 9am commitid-2 done at 10am commitid-3 done at 11am. // latest commit. HEAD is current here. 

Revenir à l’ancien commit (pour changer l’état de la twig)

git log --oneline --decorate --graph // pour voir tous vos commits

git clean -d -f // nettoie les modifications locales

git reset --hard commitid-1 // git reset --hard commitid-1 localement à ce commit

git push -u origin +develop // pousse cet état à distance. + pour forcer

# Supprimer local git merge: Cas: je suis sur la twig master et la twig master fusionnée avec une phase 2 de twig nouvelle

 $ git status 

Sur maître de twig

$ git merge phase2 $ git status

Sur maître de twig

Votre twig est en avance sur «origine / maître» par 8 commits.

Q: Comment se débarrasser de cette fusion git locale? git reset --hard essayé git reset --hard et git clean -d -f Les deux ne fonctionnaient pas. Les seules choses qui ont fonctionné sont les suivantes:

$ git reset –hard origine / master

ou

$ git reset –hard HEAD ~ 8

ou

$ git reset --hard 9a88396f51e2a068bb7 [sha commettre du code – c’est celui qui était présent avant que tous vos commits de fusion se soient produits]

#create gitignore file

touch .gitignore // crée le fichier dans les utilisateurs mac ou unix

échantillon .gitignore contenu:

 .project *.py .settings 

Lien de référence vers la feuille de sortingche GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

1. Lorsque vous ne souhaitez pas conserver vos modifications locales.

 git reset --hard 

Cette commande supprime complètement toutes les modifications locales de votre référentiel local. C’est le meilleur moyen d’éviter les conflits lors de la commande pull, uniquement si vous ne souhaitez pas conserver vos modifications locales.

2. Lorsque vous souhaitez conserver vos modifications locales

Si vous souhaitez extraire les nouvelles modifications de la télécommande et que vous souhaitez ignorer les modifications locales lors de cette extraction,

 git stash 

Il va cacher tous les changements locaux, maintenant vous pouvez tirer les modifications à distance,

 git pull 

Maintenant, vous pouvez ramener vos modifications locales par,

 git stash pop 

Utilisation:

 git checkout --  

Pour supprimer les modifications dans le répertoire de travail.

Je pense que Git a une chose qui n’est pas clairement documentée. Je pense que c’était réellement négligé.

git checkout .

Man, tu as sauvé ma journée. J’ai toujours des choses que je veux essayer en utilisant le code modifié. Mais les choses finissent parfois par perturber le code modifié, append de nouveaux fichiers non suivis, etc. Donc, ce que je veux faire, c’est mettre en scène ce que je veux, faire les choses compliquées, puis nettoyer rapidement et valider si je suis heureux.

Il y a git clean -fd fonctionne bien pour les fichiers non suivis.

Ensuite, git reset supprime simplement la mise en scène, mais git checkout est un peu trop compliqué. Spécifier un fichier un par un ou utiliser des répertoires n’est pas toujours idéal. Parfois, les fichiers modifiés que je veux supprimer sont dans des répertoires que je veux conserver. Je souhaitais pour cette commande qui supprime juste les changements non-mis en scène et ici vous êtes. Merci.

Mais je pense qu’ils devraient juste avoir une git checkout sans option, supprimer tous les changements non planifiés et ne pas toucher à la mise en scène. C’est un peu modulaire et intuitif. Plus comme ce que fait git reset . git clean devrait également faire la même chose.

Le meilleur moyen est de vérifier les modifications.

En modifiant le fichier pom.xml dans un projet nommé nom-projet, vous pouvez le faire:

 git status # modified: project-name/pom.xml git checkout project-name/pom.xml git checkout master # Checking out files: 100% (491/491), done. # Branch master set up to track remote branch master from origin. # Switched to a new branch 'master' 

Pour jeter tout ce que je veux, c’est le moyen le plus rapide de tout jeter, surtout si vous travaillez entre plusieurs mises en pension.

Cela permettra de cacher tous les changements dans la clé {0} et de les supprimer instantanément de {0}

git stash && git stash drop

Tout d’abord, vérifiez si votre modification importante est enregistrée ou non par:

$ git status

que d’essayer

$ git reset –hard

il réinitialisera votre twig à la valeur par défaut

mais si vous avez juste besoin de défaire:

$ edit (1) $ git add frotz.c filfre.c $ mailx (2) $ git réinitialisé
(3) $ git pull git: //info.example.com/ nitfol


En savoir plus >> https://git-scm.com/docs/git-reset