Différentes façons d'éliminer les modifications locales Git
j'ai cloné un dépôt git et vérifié une branche. 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) est-ce l'approche correcte pour se débarrasser des changements locaux, ou sinon s'il vous plaît faites-moi savoir la bonne approche.
(2) Quand est-ce que nous utilisons git reset --hard
car je suis capable de réinitialiser même sans cette commande
Merci
*Solution: modification(s) majeure (s): 03/26: * Remplacé beaucoup de termes vagues avec git terminologie spécifique [tracked/untracked/staged/unsaged]
il ne peut y avoir que trois catégories de fichiers lorsque nous effectuons des modifications locales:
Type 1. Mise en scène dossiers
Type 2. Non-staged Tracked files
Type 3. Dossiers Non retracés A. K. a untracked files
- échelonnés - ceux qui sont déplacés à la zone de transit / ajoutés à l'index
- fichiers modifiés
- sans traces - de nouveaux fichiers. Toujours unstaged. S'ils sont mis en scène, ça veut dire qu'ils sont traqués.
Ce que chaque commandes faire:
-
git checkout .
- supprime les fichiers suivis non marqués seulement [Type 2] -
git clean -f
- supprime les fichiers non tracés non marqués uniquement [Type 3] -
git reset --hard
- supprime les fichiers suivis et non suivis par étapes seulement[Type 1, Type 2] -
git stash -u
- Supprime toutes les modifications [Tapez 1, Tapez 2, Tapez 3]
Conclusion:
il est clair que nous pouvons utiliser l'un ou l'autre
(1) combination of `git clean -f` and `git reset --hard`
ou
(2) `git stash -u`
pour obtenir le résultat souhaité.
Remarque: Accrocher, que signifie le mot 'Store (quelque chose) en toute sécurité et en secret dans un lieu déterminé."Cela peut toujours être récupéré en utilisant git stash pop
.
Ainsi, choisir entre les deux options ci-dessus est l'appel du développeur.
Merci Christoph et Frederik Schøning.
Edit: 03/27
j'ai pensé qu'il valait la peine de mettre le ' attention "note à git clean -f
git clean -f
Il n'y a pas de retour en arrière. Utilisez -n
ou --dry-run
pour aperçu les dégâts que vous allez faire.
si vous voulez aussi supprimer des répertoires, Lancez git clean -f -d
si vous voulez simplement supprimer des fichiers ignorés, Lancez git clean -f -X
si vous voulez supprimer les fichiers ignorés et non-ignorés, Lancez git clean -f -x
référence : pour en savoir plus sur git clean
: comment supprimer les fichiers locaux (non tracés) de l'arbre de travail Git actuel?
Edit: 05/20/15
en Écartant tous les locaux s'engage sur cette branche [Suppression locale s'engage]
afin d'écarter toutes les charges locales sur cette branche, pour rendre la branche locale identique
pour "l'amont" de cette branche, il suffit d'exécuter git reset --hard @{u}
référence: http://sethrobertson.github.io/GitFixUm/fixup.html
ou de git reset --hard origin/master
[si la succursale locale est master
]
Remarque: 06/12/2015 C'est et non un duplicata de L'autre question SO qui est marqué comme duplicata. Cette question porte sur la façon de supprimer les changements GIT locaux [supprimer un fichier ajouté, supprimer les changements ajoutés au fichier existant, etc et les différentes approches; où dans l'autre fil de discussion ne concerne que la façon de supprimer la propagation locale. Si vous avez ajouté un fichier, et que vous souhaitez supprimer que seul, puis l'autre AFIN de thread n'a pas de discuter de ce sujet. Par conséquent, il ne s'agit pas d'un double de l'autre]
Edit: 06/23/15
comment inverser une propagation déjà poussée vers un dépôt distant?
$ git revert ab12cd15
Edit: 09/01/2015
Supprimer un précédent commit de la branche locale et à distance de la branche
Cas: vous venez de commit er un changement à votre branche locale et immédiatement poussé à la branche distante, Soudain réalisé, Oh non! Je n'ai pas besoin de ce changement. Maintenant faire quoi?
git reset --hard HEAD~1
[pour supprimer cette propagation de la branche locale]
git push origin HEAD --force
[les deux commandes doivent être exécutées. Pour supprimer de la branche distante]
Quelle est la branche ? Son extrait de la branche.
Modifier 09/08/2015 - Supprimer git local fusion :
je suis sur master
branche et fusionné master
de la direction, avec une nouvelle branche phase2
$ 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?
Essayé git reset --hard
et git clean -d -f
Les deux n'ont pas de travail.
la seule chose que travaillé sont l'un des suivants:
$ git reset --hard origin/master
ou
$ git reset --hard HEAD~8
ou
$ git reset --hard 9a88396f51e2a068bb7
[SHA commit code - c'est celui qui était présent avant que toute votre fusion ne se produise]
9 réponses
tout dépend exactement ce que vous essayez d'annuler/rétablir. Commencez par lire le post dans le lien de Ube . Mais pour tenter une réponse:
Hard reset
git reset --hard [HEAD]
supprimez complètement tous les changements échelonnés ou non aux fichiers suivis.
je me retrouve souvent à utiliser la réinitialisation dure, quand je suis comme " défaire tout comme si je avait fait un re-clone complet à partir de la télécommande". Dans votre cas, où vous voulez juste votre dossier vierge, ça marcherait.
Propre
git clean [-f]
supprimer les fichiers qui ne sont pas suivis.
pour supprimer les fichiers temporaires, mais garder les changements échelonnés et non étalés sur les fichiers déjà suivis. La plupart du temps, je finirais probablement par faire une règle d'ignorer au lieu de nettoyer à répétition - par exemple pour les dossiers bin/obj dans un projet C#, que vous voudriez généralement exclure de votre repo pour économiser de l'espace, ou quelque chose comme ça.
l'option-f (force) supprimera également les fichiers, qui ne sont pas suivis et sont également ignorés par git ignore though-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, en utilisant l'option force les supprimera de votre fichier système. J'ai vu sporadiquement une utilisation pour cela, par exemple lors du déploiement de scripts, et vous voulez nettoyer votre code avant de déployer, fermeture éclair ou autre.
Git clean ne touchera pas les fichiers qui sont déjà suivis.
check-out "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 ça (peut-être que quelqu'un peut help), mais en jouant un peu, il semble que cela signifie:
"annuler tous les changements dans mon arbre de travail".
i. e. changements non identifiés dans les fichiers suivis. Apparemment, il ne touche pas aux changements mis en scène et ne laisse que les fichiers non tracés.
Accrocher
certaines réponses mentionnent des cachettes. Comme le libellé l'indique, vous devriez probablement utiliser accrocher lorsque vous sont au milieu de quelque chose (pas prêt pour un commit), et vous devez temporairement changer les branches ou travailler d'une façon ou d'une autre sur un autre État de votre code, plus tard pour revenir à votre "bureau désordonné". Je ne vois pas que cela s'applique à votre question, mais c'est certainement pratique.
pour résumer
généralement, si vous êtes sûr que vous avez engagé et peut-être poussé à un changement important à distance, si vous êtes juste jouer autour ou le genre, en utilisant git reset --hard HEAD
, suivi par git clean -f
définitivement nettoyer votre code à l'état, il serait, s'il avait juste été cloné et vérifié à partir d'une branche. Il est très important de souligner que la réinitialisation supprimera également les changements échelonnés, mais non engagés. il effacera tout ce qui n'a pas été commis (sauf les fichiers non tracés, dans ce cas, utiliser nettoyer ).
Toutes les autres commandes sont là pour faciliter des scénarios plus complexes, où une granularité de "défaire les choses":)
je pense que votre question n ° 1 est couverte, mais finalement, pour conclure sur le N ° 2: la raison pour laquelle vous n'avez jamais trouvé le besoin d'utiliser git reset --hard
était que vous n'aviez jamais rien mis en scène. Si vous aviez mis en scène un changement, ni git checkout .
ni git clean -f
n'aurait inversé cela.
Espère que cela couvre.
comme pour tout en git, il y a plusieurs façons de le faire. Les deux commandes utilisées sont un moyen de le faire. Une autre chose que vous auriez pu faire est simplement les cacher avec git stash -u
. Le -u
s'assure que les fichiers nouvellement ajoutés (Non tracés) sont également inclus.
ce qui est pratique à propos de git stash -u
c'est que
- c'est probablement le plus simple (seulement?) commande unique pour accomplir votre but
- si vous changez d'avis après, vous obtenez tout votre travail de retour avec
git stash pop
(c'est comme supprimer un courriel dans gmail où vous pouvez juste annuler si vous changez d'avis après)
à partir de votre autre question git reset --hard
ne supprimera pas les fichiers non tracés de sorte que vous auriez encore besoin du git clean -f
. Mais un git stash -u
pourrait être le plus pratique.
raison pour ajouter une réponse à ce moment:
jusqu'à présent, j'ai ajouté la conclusion et les "réponses" à ma question initiale elle-même, ce qui rend la question très longue, donc passer à une réponse séparée.
j'ai aussi ajouté plus de fréquemment utilisés commandes git qui m'aide sur git, pour aider quelqu'un d'autre aussi.
premier pas avant vous faites n'importe quel commits est de configurer votre nom d'utilisateur et email qui apparaît avec votre commit.
#Définit le nom que vous voulez attaché à vos transactions de validation
$ git config --global user.name "[name]"
# définit l'email que vous voulez atacher à vos transactions de propagation
$ git config --global user.email "[email address]"
#Liste le mondial config
$ git config --list
#vérification de l'état de
git status
#Liste tous les locaux et distants branches
git branch -a
#créer une nouvelle branche locale et commencer à travailler sur cette branche
git checkout -b "branchname"
ou, il peut être fait comme un processus en deux étapes
création d'une branche: git branch branchname
travaux sur cette branche: git checkout branchname
# commit local changes [processus en deux étapes: - ajouter le fichier à l'index, ce qui signifie ajouter à la zone de transit. Puis commit les fichiers présents dans cette zone de transit]
git add <path to file>
git commit -m "commit message"
# caisse d'une autre succursale locale
git checkout "local branch name"
#supprimer tous les changements dans la branche locale [supposez que vous avez fait quelques changements dans la branche locale comme Ajouter un nouveau fichier ou modifier fichier existant, ou de faire une validation, mais n'ont plus besoin que]
git clean -d -f
et git reset --hard
[nettoyer toutes les modifications locales apportées à la branche locale sauf si Local commit]
git stash -u
supprime également tous les changements
Note:
Il est clair que nous pouvons utiliser
(1) combinaison de git clean –d –f
et git reset --hard
OU
(2) git stash -u
pour obtenir le résultat souhaité.
Note 1: Arrimage, comme le mot signifie " stocker (quelque chose) en sécurité et secrètement dans un endroit spécifié.'Cela peut toujours être retiré en utilisant git stash pop. Ainsi, choisir entre les deux options ci-dessus est l'appel du développeur.
Note 2: git reset --hard
supprimera les modifications apportées au répertoire de travail. Assurez-vous de cacher tous les changements locaux que vous voulez garder avant d'exécuter cette commande.
# passez à la branche 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/master]
git pull
# fusionner la branche des fonctionnalités dans la branche principale.
git merge feature_branch
# Réinitialisation de la branche master à l'origine de l'état.
git reset origin/master
#accidentellement supprimé un fichier de local, comment récupérer il de retour?
Faites un git status
pour obtenir le chemin de fichier complet de la ressource supprimée
git checkout branchname <file path name>
c'est ça!
#Merge master branch with somethotherbranch
git checkout master
git merge someotherbranchname
#renommer branche locale
git branch -m old-branch-name new-branch-name
#supprimer la branche locale
git branch -D branch-name
#supprimer à distance de la branche
git push origin --delete branchname
ou
git push origin :branch-name
#revenir un commit déjà poussé à un dépôt distant
git revert hgytyz4567
#succursale d'une livraison antérieure à l'aide de GIT
git branch branchname <sha1-of-commit>
#Changer le message de validation de la plus récente commettre déjà été poussé à distance
git commit --amend -m "new commit message"
git push --force origin <branch-name>
# Écartant tous les locaux s'engage sur cette branche [Suppression locale s'engage]
pour rejeter toutes les commits locales sur cette branche, pour rendre la branche locale identique à la "amont" de cette branche, il suffit d'exécuter
git reset --hard @{u}
référence: http://sethrobertson.github.io/GitFixUm/fixup.html
ou faire git reset --hard origin/master
[si la succursale locale est maître]
# Revenir un commit déjà poussé à un dépôt distant?
$ git revert ab12cd15
#Supprimer une précédente livraison de la section locale et à distance de la branche
case à cocher: vous venez d'effectuer un changement à votre succursale locale et immédiatement poussé à la succursale éloignée, soudain réalisé , Oh non! Je n'ai pas besoin de ce changement. Maintenant faire quoi?
git reset --hard HEAD~1
[pour supprimer cette propagation de la branche locale. 1 indique celui que vous avez commis]
git push origin HEAD --force
[les deux commandes doivent être exécutées. Pour supprimer de la branche distante]. Extrait de la branche sera désignée comme la branche où vous effectuez cette opération.
#Supprimer certains de ces dernières commits locaux et distants pensions et de préserver à la livraison que vous souhaitez. ( une sorte de revenir s'engage de local et à distance)
supposons que vous avez 3 commits que vous avez poussé à la branche 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.
Pour revenir à l'ancien commit ( pour modifier l'état de la branche)
git log --oneline --decorate --graph
// pour voir tous vos commitids
git clean -d -f
/ / nettoyer tout changement local
git reset --hard commitid-1
/ / reverting Local a cette commission 1519540920"
git push -u origin +develop
// bouton-poussoir de cet état à distance. + à faire de la force de poussée
# Remove local git merge: Cas: Je suis sur la branche master et de fusion de la branche principale, avec une nouvelle branche phase2
$ git status
Sur la branche master
$ git merge phase2
$ git status
Sur la branche master
Votre branche est en avance de 'origin/master' par 8 s'engage.
Q: comment se débarrasser de cette fusion git locale? essayé git reset --hard
et git clean -d -f
tous les deux n'ont pas fonctionné.
La seule chose que travaillé sont l'un des suivants:
$ git reset --hard origin / master
ou
$ git reset --hard HEAD~8
ou
$ git reset --hard 9a88396f51e2a068bb7
[SHA commit code - c'est celui qui était présent avant que toute votre fusion ne se produise]
#créer gitignore fichier
touch .gitignore
// créer le fichier dans mac ou unix utilisateurs
de l'échantillon .gitignore sommaire:
.project
*.py
.settings
référence lien vers la fiche technique de GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
1. Lorsque vous ne souhaitez pas conserver vos changements locaux.
git reset --hard
cette commande supprimera complètement toutes les modifications locales de votre dépôt local. C'est la meilleure façon d'éviter les conflits lors de la commande pull, seulement si vous ne souhaitez pas conserver vos changements locaux.
2. Quand vous voulez garder vos changements locaux
Si vous voulez tirez les nouveaux changements de distance et souhaitez ignorer les local changements au cours de ce pull, puis,
git stash
Il va ranger tous les changements locaux, maintenant vous pouvez tirer les modifications distantes,
git pull
Maintenant, vous pouvez ramener vos changements locaux par,
git stash pop
utiliser:
git checkout -- <file>
pour rejeter 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 en fait négligé.
git checkout .
Mec, tu m'as sauvé la mise. J'ai toujours des choses à essayer avec le code modifié. Mais les choses finissent parfois par gâcher le code modifié, ajouter de nouveaux fichiers non tracés, etc. Donc ce que je veux faire, c'est mettre en scène ce que je veux, faire les trucs désordonnés, puis nettoyer rapidement et m'engager si je suis heureux.
il y a git clean -fd
fonctionne bien pour les fichiers non tracés.
puis git reset
supprime simplement la mise en scène, mais git checkout
est un peu trop lourd. Spécifier un fichier par un ou utiliser des répertoires n'est pas toujours idéal. Parfois, les fichiers modifiés je veux me débarrasser de sont dans des répertoires que je veux garder. J'ai souhaité cette commande qui supprime les changements non programmés et te voilà. Grâce.
Mais je pense qu'ils devraient juste git checkout
sans options, supprimer tous les changements non marqués et de ne pas toucher l'étape. C'est plutôt modulaire et intuitif. Plutôt ce que git reset
fait. git clean
devrait faire de même.
le meilleur moyen est de vérifier les changements.
modifier le fichier pom.xml dans un projet nommé project-name 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 ignorer tout je tiens à les ranger et de les ranger, c'est le moyen le plus rapide pour se défausser de toutes, surtout si vous travaillez entre plusieurs titres.
cela cachera tous les changements dans la touche {0}
et la laissera immédiatement tomber de {0}
git stash && git stash drop
tout d'abord, vérifiez si votre changement important est enregistré ou non par:
$ git status
que essayez
$ git reset --hard
il réinitialisera votre branche par défaut
mais si vous avez besoin juste annuler:
$ modifier (1) $ git add frotz.C filfre.c $ mailx (2) $ git reset
( 3) $ git pull git://info.exemple.com / nitfol 151910920"
lire la suite > > https://git-scm.com/docs/git-reset