Je viens de cloner un référentiel git et de vérifier une branche. J'ai travaillé dessus, puis j'ai décidé de supprimer toutes mes modifications locales, 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 la bonne approche pour se débarrasser des changements locaux, ou bien faites-moi savoir la bonne approche.
(2) Quand utilisons-nous git reset --hard
car je peux réinitialiser même sans cette commande
Merci
* Solution: Édition (s) majeure (s): 26/03: * Remplacement de nombreux termes vagues par une terminologie spécifique à git [tracked / untracked / staged / unstaged]
Il ne peut 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 organisés
Type 3. Fichiers non suivis non classés aka fichiers non suivis
- Staged - Ceux qui sont déplacés vers la zone de transit / Ajouté à l'index
- Suivi - fichiers modifiés
- UnTracked - nouveaux fichiers. Toujours sans mise en scène. S'ils sont organisés, cela signifie qu'ils sont suivis.
Que fait chaque commande:
git checkout .
- Supprime UNIQUEMENT les fichiers suivis non classés [Type 2]git clean -f
- Supprime les fichiers non suivis non suivis UNIQUEMENT [Type 3]git reset --hard
- Supprime UNIQUEMENT les fichiers suivis par étapes et suivis par étapes [Type 1, Type 2]git stash -u
- Supprime toutes les modifications [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é.
Remarque: Stashing, car le mot signifie «stocker (quelque chose) en toute sécurité et secrètement dans un endroit spécifié». Cela peut toujours être récupéré à l'aide de git stash pop
. Donc, choisir entre les deux options ci-dessus est l'appel du développeur.
Merci Christoph et Frederik Schøning.
Modifier: 27/03
Je pensais que la valeur de ce mettre la « attention note » à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 causerez.
Si vous souhaitez également supprimer des répertoires, exécutez git clean -f -d
Si vous souhaitez simplement supprimer les fichiers ignorés, exécutez git clean -f -X
Si vous souhaitez supprimer les fichiers ignorés et non ignorés, exécutez git clean -f -x
référence: plus d'informations sur git clean
: Comment supprimer les fichiers locaux (non suivis) de l'arborescence de travail Git actuelle?
Modifier: 20/05/15
Suppression de tous les commits locaux sur cette branche [Suppression des commits locaux]
Afin de supprimer tous les commits locaux sur cette branche, pour rendre la branche locale identique à "l'amont" de cette branche, exécutez simplement git reset --hard @{u}
Référence: http://sethrobertson.github.io/GitFixUm/fixup.html
ou faites git reset --hard origin/master
[si la succursale locale est master
]
Remarque: 06/12/2015 Ce n'est pas un doublon de l'autre question SO marquée comme doublon. Cette question porte sur la façon de supprimer les modifications GIT locales [supprimer un fichier ajouté, supprimer les modifications ajoutées au fichier existant, etc. et les différentes approches; Où, dans l'autre thread SO, uniquement comment supprimer la validation locale. Si vous avez ajouté un fichier et que vous souhaitez le supprimer seul, l'autre thread SO n'en discute pas. Par conséquent, ce n'est pas un doublon de l'autre]
Modifier: 23/06/15
Comment rétablir un commit déjà poussé vers un référentiel distant?
$ git revert ab12cd15
Modifier: 09/01/2015
Supprimer une validation précédente de la branche locale et de la branche distante
Cas: Vous venez de commettre un changement dans votre branche locale et vous avez immédiatement poussé vers la branche distante, réalisez soudain, Oh non! Je n'ai pas besoin de ce changement. Maintenant quoi faire?
git reset --hard HEAD~1
[pour supprimer ce commit 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? C'est la branche actuellement vérifiée.
Modifier le 09/08/2015 - Supprimer la fusion git locale :
Je suis en master
succursale et j'ai fusionné master
avec une nouvelle succursalephase2
$ 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 les git clean -d -f
deux n'ont pas fonctionné.
La seule chose qui a fonctionné est l'une des suivantes:
$ 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 toutes vos validations de fusion ne se produisent]
git stash -a
[ou --all] stockera également les fichiers ignorés et non suivis. git clean -x
nettoiera également les fichiers ignorés. git clean -X
ne nettoiera que les fichiers ignorés.